2012-03-22 69 views
0

你好這一切似乎是我的問題 我在mysql中有一個表,並在試圖插入時製作一個c#應用程序我得到一個你在你的SQL語法中有一個錯誤;請查看與我的companyVal第1行的「OIL COMPANY」附近的正確語法對應的MySQL服務器版本的手冊。它將與一個值,對於所有其他默認插入,但我添加第二個值就出現了錯誤c#插入到mysql多個變量

 string ConnectionString2 = ConfigurationSettings.AppSettings["ConnectionString2"]; 
     MySqlConnection connection2; 
     connection2 = new MySqlConnection(ConnectionString2); 
     connection2.Open(); 
     MySqlCommand command = new MySqlCommand("INSERT INTO spt_proposal  (lab_Prop_Id,customer_Name) VALUE (" + a + "," + companyVal + ")", connection2); 
     command.ExecuteNonQuery(); 
     connection2.Close(); 

布倫特

回答

1

你缺少引號圓你的字符串和VALUE應該是VALUES

string sql = "INSERT ... VALUES ('" + a + "','" + companyVal + "')"; 

另外我建議你使用參數化查詢。

+0

謝謝你,我會看參數查詢 – bmorrison1982 2012-03-22 21:16:48

5

不要這樣下手:

// I split the line 
MySqlCommand command = 
    new MySqlCommand("INSERT INTO spt_proposal lab_Prop_Id,customer_Name) " 
     "VALUE (" + a + "," + companyVal + ")", connection2); 

打開你到SQL injection attacks,以及使你的代碼更難理解通過混合代碼和數據,並造成了潛在的轉換問題(特別是日期和時間)。

而是使用參數化SQL語句將值賦予數據庫。

雖然你可能只是加引號,你絕對不應該這樣做。利空數據(無論是否故意惡意或不變量ab可能是一個嚴重的安全隱患。只是不要去做。

需要改變VALUEVALUES,但我只能做這後移動到參數化的SQL。哦,並使用using語句來自動配置命令和連接的,所以如果拋出一個異常,你不泄漏資源。

+0

謝謝我會查看參數化查詢 – bmorrison1982 2012-03-22 21:17:14

+1

@ bmorrison1982:您應該使* * top *優先。我會認真地建議你不要在任何其他代碼上工作,而你仍然得到像這樣的查詢。 – 2012-03-22 21:22:53

0

這裏猜測,是列CUSTOMER_NAME一個字符串/文本列?我沒有太多經驗h mySQL,但是使用SQL Server字符串總是必須被ticks(')包圍。因此,像這可能工作:

INSERT INTO spt_proposal  (lab_Prop_Id,customer_Name) VALUE (" + a + ",'" + companyVal + "')", connection2); 

然而,這通常被認爲是「壞表」,並稍微好一點的方法是使用的String.Format甚至(非常非常)更好的是參數化的SQL。

+0

謝謝我會看看參數化查詢 – bmorrison1982 2012-03-22 21:17:41

0

更改command文字是parameterized

var commandText = "INSERT INTO spt_proposal(lab_Prop_Id,customer_Name)" + 
    " VALUES(?lab, ?cust)"; 

var command = new MySqlCommand(commandText, connection2); 
command.Parameters.Add("?lab", MySqlDbType.VarChar, 80).Value = a; 
command.Parameters.Add("?cust", MySqlDbType.VarChar, 80).Value = companyVal; 

command.ExecuteNonQuery(); 

我做野假設字段類型爲varchar(80),哈哈......