2016-07-09 5 views
1

次のC#のコードが生成され、「SQL構文エラーを...」C#のMySQLを挿入

string query = "INSERT INTO jobscollection (number,desc,client,jobtype,statustype,initials) VALUES(@number,@desc,@client,@jobtype,@statustype,@initials)"; 

MySqlCommand cmd = new MySqlCommand(query, connection); 

cmd.Parameters.Add("@number", MySqlDbType.VarChar).Value = JobNumber; 
cmd.Parameters.Add("@desc", MySqlDbType.VarChar).Value = Description; 
cmd.Parameters.Add("@client", MySqlDbType.Int32).Value = clientId; 
cmd.Parameters.Add("@jobtype", MySqlDbType.Int32).Value = typeID; 
cmd.Parameters.Add("@statustype", MySqlDbType.Int32).Value = statusId; 
cmd.Parameters.Add("@initials", MySqlDbType.VarChar).Value = Initials; 

cmd.ExecuteNonQuery(); 

リンクMySQLのワークベンチ内のテーブルのイメージがあります。またクライアントID、JOBTYPEとステータスタイプは、他のテーブル内のIDへの外部キーです(とIDが存在しない)

MySQL Table

は、誰もが私のエラーを見つけることができますか?ここで

は完全な例外メッセージ

{MySql.Data.MySqlClient.MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc,client,jobtype,statustype,initials) VALUES('1007.01','Test',3,2,3,'PI')' at line 1  
at MySql.Data.MySqlClient.MySqlStream.ReadPacket() 
at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId) 
at MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId) 
at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) 
at MySql.Data.MySqlClient.MySqlDataReader.NextResult() 
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) 
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader() 
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery() 
at PCE.DatabaseUtility.InsertNewJob(String JobNumber, String Description, Int32 clientId, Int32 typeID, Int32 statusId, String Initials)} 

され、接続文字列

string connectionString; 
connectionString = "SERVER=" + server + ";" + "DATABASE=" + 
database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";" 
+ "Allow User Variables=true;"; 
+0

try-catchブロックに入れ、ここで例外メッセージを貼り付けます。通常は「SQLエラーが発生しました......」 –

+0

更新された質問 – tuskcode

答えて

1

DESCは予約(My)SQL keywordです。

あなたはこのように、あなたの列の名前を変更またはクエリでそれをエスケープするか必要があります:

INSERT INTO jobscollection (number,`desc`,client,jobtype,statustype,initials) VALUES(@number,@desc,@client,@jobtype,@statustype,@initials) 
+1

良い仕事 - より多くのキーワードを扱う必要があります。ありがとうございました。 – tuskcode

+0

あなたは大歓迎です。検討[upvoting](http://stackoverflow.com/help/how-to-answer)有用な答え:) –