2011-02-16 67 views
4

我目前正在開發一個使用C#WPF的應用程序。我正試圖將數據存儲到MySQL數據庫中。以下是我的代碼。使用C#插入記錄到MySQL數據庫

MySqlCommand cmd = new MySqlCommand("", conn); 

       cmd.CommandText = "INSERT INTO BUG_REPORTS (bug_softwareID, bug_firstName, bug_lastName, bug_email, bug_description, bug_ip_addr, bug_dateReported) " 
        + "VALUES (@softwareID, @firstName, @lastName, @email, @description, @ip_addr, @dateReported)"; 

       cmd.Parameters.Add("@softwareID"); 
       cmd.Parameters.Add("@firstName"); 
       cmd.Parameters.Add("@lastName"); 
       cmd.Parameters.Add("@email"); 
       cmd.Parameters.Add("@description"); 
       cmd.Parameters.Add("@ip_addr"); 
       cmd.Parameters.Add("@dateReported"); 

       cmd.Parameters["@softwareID"].Value = softwareID; 
       cmd.Parameters["@firstName"].Value = getFirstName(); 
       cmd.Parameters["@lastName"].Value = getLastName(); 
       cmd.Parameters["@email"].Value = getEmail(); 
       cmd.Parameters["@description"].Value = getDescription(); 
       cmd.Parameters["@ip_addr"].Value = ip_addr; 
       cmd.Parameters["@dateReported"].Value = date; 

       cmd.ExecuteNonQuery(); 

每次我嘗試插入一條記錄時,都會出現錯誤'只有MySQLParameter對象可以存儲。我究竟做錯了什麼。我發現文章,一切似乎都沒問題。

感謝您的幫助,您可以提供

回答

2

在你paramters嘗試:

cmd.Parameters.Add(new OdbcParameter("@softwareID", softwareID)); 

等等等等與參數的其餘部分。

並且誠實地說,它可能就像建立你的sql inline並執行沒有參數的命令一樣簡單,除非你不驗證文本並且關注注入攻擊。

+1

嗨謝謝你的幫助。我已經得到它的工作,但不完全符合你的建議,但答案確實幫了我。我沒有使用Odbc,因此我忽略了現在提出的OdbcParameter,並提出了一些不同的建議。所以我使用了cmd.Parameters.AddWithValues(「@ softwareID」,softwareID)); – Boardy 2011-02-16 20:06:50

0

我不知道,如果它直接翻譯過來,但是當我想插入或更新與T-SQL表我用.ExecuteScalar()。

+2

的ExecuteNonQuery()是呼籲INSERT或UPDATE的正確方法。 ExecuteScalar()用於返回單個值(如計數)或讀取返回的第一行的第一列。 – womp 2011-02-16 20:04:58

+0

@womp - 我不知道。謝謝! – newuser 2011-02-16 20:31:15

0

您是否嘗試過使用這種風格。它更緊湊,可能可以解決您的問題。

cmd.Parameters.Add("@softwareID",softwareID); 
cmd.Parameters.Add("@firstName",getFirstName()); 
cmd.Parameters.Add("@lastName",getLastName()); 
cmd.Parameters.Add("@email",getEmail()); 
cmd.Parameters.Add("@description",getDescription()); 
cmd.Parameters.Add("@ip_addr",ip_addr); 
cmd.Parameters.Add("@dateReported",date); 
cmd.ExecuteNonQuery(); 
0

MySql .NET連接器的參數標識符是'?'。

所以,你必須使用下面的代碼:

cmd.CommandText = "INSERT INTO BUG_REPORTS (bug_softwareID, bug_firstName, bug_lastName, bug_email, bug_description, bug_ip_addr, bug_dateReported) " 
         + "VALUES (?softwareID, ?firstName, ?lastName, ?email, ?description, ?ip_addr, ?dateReported)"; 

cmd.Parameters.Add("?softwareID"); 
cmd.Parameters.Add("?firstName"); 
cmd.Parameters.Add("?lastName"); 
cmd.Parameters.Add("?email"); 
cmd.Parameters.Add("?description"); 
cmd.Parameters.Add("?ip_addr"); 
cmd.Parameters.Add("?dateReported"); 

cmd.Parameters["?softwareID"].Value = softwareID; 
cmd.Parameters["?firstName"].Value = getFirstName(); 
cmd.Parameters["?lastName"].Value = getLastName(); 
cmd.Parameters["?email"].Value = getEmail(); 
cmd.Parameters["?description"].Value = getDescription(); 
cmd.Parameters["?ip_addr"].Value = ip_addr; 
cmd.Parameters["?dateReported"].Value = date; 
相關問題