2017-04-08 13 views
1

問題がどこにあるのか分かりません。修正しようとしましたが、検索できません。C#/ SQLの構文が間違っています

'、'の近くに構文が正しくありません。

enter image description here

コード:

using System.Data.SqlClient; 

SqlConnection ABC = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\kindl\Desktop\WindowsFormsApplication2\WindowsFormsApplication2\bd_formular.mdf;Integrated Security=True;Connect Timeout=30"); 

SqlCommand comm = new SqlCommand(); 

SqlDataReader dataRead; 

private void B1_Click(object sender, EventArgs e) 
{ 
    ABC.Open(); 
    comm.CommandText = "insert into dbo.bd_formular(facultate,domeniul,specializare,forma_invatamant,d_inscriere,nume_prenume,cod,localitate,judet,tara,strada,numar,bloc,scara,etaj,apartament,sector,cod_p,data_nasterii,locul_nasterii,judet_n,tara_n,sex,starea_civila,cetatenie,cetatenie_op,etnie,cnp,serie,numar_cnp,eliberat,e_data,studii_preuni,nume_unitate,spec_fili_profil,oras_s,,judet_s,tara_s,forma_de_invatamant,medie_bac,durata_studii,data_absolvirii,tipul_diploma,seria_diploma,numarul_diploma,emis_de_catre,data_emiterii,nr_foi_matricole,introducere_date,semnatura)values('" 
    + C1.Text + "','" + T1.Text + "','" + T2.Text + "','" + C2.Text + "','" + DTP1.Value.ToString("MM/dd/yyyy") + "','" + T3.Text + "','" + T4.Text + "','" + T5.Text + "','" + T6.Text + "','" + T7.Text + "','" 
    + T8.Text + "','" + T9.Text + "','" + T10.Text + "','" + T11.Text + "','" + T12.Text + "','" + T13.Text + "','" + T14.Text + "','" + T15.Text + "','" + DTP2.Value.ToString("MM/dd/yyyy") + "','" + T16.Text + "','" + T17.Text + "','" + T18.Text + "','" + C3.Text + "','" + C4.Text + "','" + C5.Text + "','" + T19.Text + "','" + T20.Text + "','" + C6.Text + "','" + T21.Text + "','" + T22.Text + "','" + T23.Text + "','" + T24.Text + "','" + DTP3.Value.ToString("MM/dd/yyyy") + "','" + C7.Text + "','" + T25.Text 
    + "','" + T26.Text + "','" + T27.Text + "','" + T28.Text + "','" + T29.Text + "','" + C8.Text + "','" + T30.Text + "','" + C9.Text + "','" + DTP4.Value.ToString("MM/dd/yyyy") + "','" + C10.Text + "','" + T31.Text + "','" + T32.Text + "','" + T33.Text + "','" + DTP5.Value.ToString("MM/dd/yyyy") + "','" + T34.Text + "','" + T35.Text + "','" + T36.Text + "')"; 

    comm.ExecuteNonQuery(); 
    ABC.Close(); 

    MessageBox.Show("Adaugat cu succes!"); 
} 
+1

クエリ文字列の代わりにパラメータを使用する方法を学びます。これにより予期しない構文エラーを防ぐことができます。 –

+1

Sqlパラメータの使用。[ベストプラクティス - SQL文の実行](http://stackoverflow.com/documentation/.net/3589/ado-net/14261/best-practices-executing-sql-statements)を参照してください。また、 'using'ステートメントを使用し、接続インスタンスを共有しないでください(もう一度、リンクを参照してください)。最後に、例外の内容とその読み方を理解します。 – Igor

答えて

2

既に指摘したように、例外は、お客様の明細書の,の二重によって発生します。本当にSQLパラメータを使用する必要があります。また、usingステートメントを使用し、接続インスタンスを共有しないでください(再度、リンクを参照)。

// store this in the app.config instead of hard coding 
const string SqlConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\kindl\Desktop\WindowsFormsApplication2\WindowsFormsApplication2\bd_formular.mdf;Integrated Security=True;Connect Timeout=30"; 

private void B1_Click(object sender, EventArgs e) 
{ 
    const string sqlText = "INSERT INTO dbo.bd_formular(facultate,domeniul,specializare,forma_invatamant,d_inscriere,nume_prenume,cod,localitate,judet,tara,strada,numar,bloc,scara,etaj,apartament,sector,cod_p,data_nasterii,locul_nasterii,judet_n,tara_n,sex,starea_civila,cetatenie,cetatenie_op,etnie,cnp,serie,numar_cnp,eliberat,e_data,studii_preuni,nume_unitate,spec_fili_profil,oras_s,judet_s,tara_s,forma_de_invatamant,medie_bac,durata_studii,data_absolvirii,tipul_diploma,seria_diploma,numarul_diploma,emis_de_catre,data_emiterii,nr_foi_matricole,introducere_date,semnatura) VALUES (@facultate,@domeniul,@specializare,@forma_invatamant,@d_inscriere,@nume_prenume,@cod,@localitate,@judet,@tara,@strada,@numar,@bloc,@scara,@etaj,@apartament,@sector,@cod_p,@data_nasterii,@locul_nasterii,@judet_n,@tara_n,@sex,@starea_civila,@cetatenie,@cetatenie_op,@etnie,@cnp,@serie,@numar_cnp,@eliberat,@e_data,@studii_preuni,@nume_unitate,@spec_fili_profil,@oras_s,@judet_s,@tara_s,@forma_de_invatamant,@medie_bac,@durata_studii,@data_absolvirii,@tipul_diploma,@seria_diploma,@numarul_diploma,@emis_de_catre,@data_emiterii,@nr_foi_matricole,@introducere_date,@semnatura)"; 
    // use using statements to ensure connections are closed and resources are freed 
    using(var con = new SqlConnection(SqlConnectionString)) 
    using(var comm = new SqlCommand(sqlText, con)) 
    { 
     comm.Parameters.Add(new SqlParameter("@facultate", SqlDbType.VarChar){Value = C1.Text}); 
     comm.Parameters.Add(new SqlParameter("@domeniul", SqlDbType.VarChar){Value = T1.Text}); 
     // etc, fill this in with the remaining parameters 

     con.Open(); 
     comm.ExecuteNonQuery(); 
     // not really a great place for this, I recommend splitting the ADO.NET code from the UI code 
     MessageBox.Show("Adaugat cu succes!"); 
    } 
} 

最後に、例外の内容とその読み方を理解してください。

+0

私はまさにあなたが書いたことをしますが、今は "@"(スカラー変数 "@"を宣言しなければならない)を宣言する必要があります –

+0

@IulianGlăvan - 私はあなたがそれを理解したと思いますが、 ',,'を返します。これはfind/replaceの影響を受けて、対応するパラメータ名の文字列を作成します。私はこの修正プログラムの解答を更新しました。 – Igor

3

あなたが連続して2つのコンマを持っています。同じものを取り除く。

enter image description here

提案:パラメータ化クエリを使用してください。

-1

これは右のクエリがパラメータ化クエリを使用しようも

using System.Data.SqlClient; 
SqlConnection ABC = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\kindl\Desktop\WindowsFormsApplication2\WindowsFormsApplication2\bd_formular.mdf;Integrated Security=True;Connect Timeout=30"); 
      SqlCommand comm = new SqlCommand(); 
      SqlDataReader dataRead; 

      private void B1_Click(object sender, EventArgs e) 
      { 





        ABC.Open(); 
        comm.CommandText = "insert into dbo.bd_formular(facultate,domeniul,specializare,forma_invatamant,d_inscriere,nume_prenume,cod,localitate,judet,tara,strada,numar,bloc,scara,etaj,apartament,sector,cod_p,data_nasterii,locul_nasterii,judet_n,tara_n,sex,starea_civila,cetatenie,cetatenie_op,etnie,cnp,serie,numar_cnp,eliberat,e_data,studii_preuni,nume_unitate,spec_fili_profil,oras_s,judet_s,tara_s,forma_de_invatamant,medie_bac,durata_studii,data_absolvirii,tipul_diploma,seria_diploma,numarul_diploma,emis_de_catre,data_emiterii,nr_foi_matricole,introducere_date,semnatura)values('" 
    + C1.Text + "','" + T1.Text + "','" + T2.Text + "','" + C2.Text + "','" + DTP1.Value.ToString("MM/dd/yyyy") + "','" + T3.Text + "','" + T4.Text + "','" + T5.Text + "','" + T6.Text + "','" + T7.Text + "','" 
    + T8.Text + "','" + T9.Text + "','" + T10.Text + "','" + T11.Text + "','" + T12.Text + "','" + T13.Text + "','" + T14.Text + "','" + T15.Text + "','" + DTP2.Value.ToString("MM/dd/yyyy") + "','" + T16.Text + "','" + T17.Text + "','" + T18.Text + "','" + C3.Text + "','" + C4.Text + "','" + C5.Text + "','" + T19.Text + "','" + T20.Text + "','" + C6.Text + "','" + T21.Text + "','" + T22.Text + "','" + T23.Text + "','" + T24.Text + "','" + DTP3.Value.ToString("MM/dd/yyyy") + "','" + C7.Text + "','" + T25.Text 
    + "','" + T26.Text + "','" + T27.Text + "','" + T28.Text + "','" + T29.Text + "','" + C8.Text + "','" + T30.Text + "','" + C9.Text + "','" + DTP4.Value.ToString("MM/dd/yyyy") + "','" + C10.Text + "','" + T31.Text + "','" + T32.Text + "','" + T33.Text + "','" + DTP5.Value.ToString("MM/dd/yyyy") + "','" + T34.Text + "','" + T35.Text + "','" + T36.Text + "')"; 
        comm.ExecuteNonQuery(); 
        ABC.Close(); 
        MessageBox.Show("Adaugat cu succes!"); 


      } 

それを試しています。

関連する問題