2017-05-27 3 views
0

OleDbExceptionが発生しました:INSERT INTO文の構文エラーです。私はINSERT INTO文が良いと思います。パラメータには良好なデータ型があるので、問題はありません。誰かが問題の原因を知っている可能性がありますか?OleDbException:INSERT INTO文の構文エラー

 OleDbCommand command = new OleDbCommand(); 
     command.Connection = conn; 
     command.CommandType = CommandType.Text; 
     command.CommandText = String.Format("INSERT INTO Employees" + 
      " (ID, Company, Last Name, First Name, E-mail Address, Job Title, Business Phone, Home Phone" + 
      ", Mobile Phone, Fax NUmber, Address, City, State/Province, ZIP/Postal Code, Country/Region, Web Page, Notes)" + 
      " Values ('{0}', '{1}','{2}','{3}','{4}','{5}'," + 
      "'{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}')", iD,kompanija,prezime,ime,email, 
      zvanje,busTelefon,telefon,mobTelefon,fax,adresa,grad,okrug,postanskiBroj,zemlja,web,beleska);    zvanje,busTelefon,telefon,mobTelefon,fax,adresa,grad,okrug,postanskiBroj,zemlja,web,beleska); 

     conn.Open(); 
     command.ExecuteNonQuery(); 
     conn.Close(); 

エラーメッセージ: enter image description here

UDATEのSQL:

 OleDbCommand command = new OleDbCommand(); 
     command.Connection = conn; 
     command.CommandType = CommandType.Text; 
     string cmdText = String.Format(@"UPDATE TABLE Employees " + 
         "SET" + 
         " Company='" + kompanija + "'," + 
         " [Last Name]='" + prezime + "'," + 
         " [First Name]='" + ime + "'," + 
         " [E-mail Address]='" + email + "' ," + 
         " [Job Title]='" + zvanje +"'," + 
         " [Business Phone]='" + busTelefon + "'," + 
         " [Home Phone]='" + telefon + "'," + 
         " [Mobile Phone]='" + mobTelefon + "'," + 
         " [Fax Number]='" + fax + "'," + 
         " Address='" + adresa + "'," + 
         " City='" + grad + "'," + 
         " [State/Province]='" + okrug + "'," + 
         " [ZIP/Postal Code]='" + postanskiBroj + "'," + 
         " [Country/Region]='" + zemlja + "'," + 
         " [Web Page]='" + web + "'," + 
         " Notes='" + beleska + "' WHERE ID="+iD); 
     command.CommandText = cmdText; 

     conn.Open(); 
     command.ExecuteNonQuery(); 
     conn.Close(); 

そして、このSQLは動作しません。以前と同じエラーです。

+0

を使用する必要があります。 –

+0

これはどのタイプのDBですか?その画像の「詳細を表示」をクリックすると表示されるものは何ですか? –

答えて

2

あなたのフィールド名は、/(除算演算子)のようなスペースや他のmisleadingsの文字が含まれている場合はまた、あなたはあなたのクエリにパラメータを使用していない角括弧で

string cmdText = @"INSERT INTO Employees 
        (ID, Company, [Last Name], [First Name], [E-mail Address], 
        .., [State/Province], ....) VALUES (....)"; 

を同封するためにそれらを必要とします。 String.Formatは、無効な入力(たとえば、姓の値に単一の引用符を使用しようとする)であなたを保護できない文字列連結のもう1つのタイプです。Sql Injection vulnerabilityからコードを保存することはできません。

あなたはいつもあなたは、エラーメッセージを投稿する必要がパラメータ化クエリ

string cmdText = @"INSERT INTO Employees (your_field_list_comma_sep) 
        VALUES (@id, @company, @lastname, @firstname, 
        ......)"; 

OleDbCommand cmd = new OleDbCommand(cmdText, conn); 
cmd.Parameters.Add("@id", OleDbType.Integer).Value = iD; 
cmd.Parameters.Add("@company", OleDbType.VarWChar).Value = kompanija; 
cmd.Parameters.Add("@lastname", OleDbType.VarWChar).Value = prezime; 
cmd.Parameters.Add("@firstname", OleDbType.VarWChar).Value = ime; 
.... 
// add all the other parameters with their name and type 
.... 
cmd.ExecuteNonQuery(); 
+0

最初の提案は機能しません。パラメータ化されたクエリを試してみます。 – MiOnIs

+0

はい、私は大括弧で囲まれたフィールドを入れようとしたときに同じエラーが発生します – MiOnIs

+0

[State/Province]の前後に角括弧を入れてください。/は除算演算子と見なされますが、INSERTステートメントでは正しくありません。 – Steve

関連する問題