2017-04-08 2 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

쿼리 문자열을 munging하는 대신 매개 변수를 사용하는 방법을 학습합니다. 그러면 예기치 않은 구문 오류가 방지됩니다. –

+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

. 같은 것을 제거하십시오.

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!"); 


      } 

또한 매개 변수화 된 쿼리를 사용하려고 시도합니다.