2012-11-27 32 views
20

Tôi đang làm cho một C# Windows Form Application trong visual studio 2010.MySqlCommand Command.Parameters.Add là lỗi thời

Đó ứng dụng được kết nối với một cơ sở dữ liệu mysql, và tôi muốn để chèn dữ liệu trong đó.

Bây giờ tôi có một phần mã này:

MySqlConnection connection; 
string cs = @"server=server ip;userid=username;password=userpass;database=databse"; 
connection = new MySqlConnection(cs); 
connection.Open(); 

MySqlCommand command = new MySqlCommand(); 
string SQL = "INSERT INTO `twMCUserDB` (`mc_userName`, `mc_userPass`, `tw_userName`, `tw_userPass`) VALUES ('@mcUserName', '@mcUserPass', '@twUserName', '@twUserPass')"; 
command.CommandText = SQL; 
command.Parameters.Add("@mcUserName", mcUserNameNew); 
command.Parameters.Add("@mcUserPass", mcUserPassNew); 
command.Parameters.Add("@twUserName", twUserNameNew); 
command.Parameters.Add("@twUserPass", twUserPassNew); 
command.Connection = connection; 
command.ExecuteNonQuery(); 
connection.Close(); 

Kết nối là tốt. Điều đó hoạt động.

Tôi đã đọc here theo cách mà tôi hiện có, là cách lưu để thực hiện truy vấn. Điều đó vẫn đúng không?

Và bây giờ đến câu hỏi thực. Với mã trên, tôi nhận được cảnh báo sau đây trong visual studio:

'MySql.Data.MySqlClient.MySqlParameterCollection.Add(string, object)' is obsolete: '"Add(String parameterName, Object value) has been deprecated. Use AddWithValue(String parameterName, Object value)"' 

Đó là cảnh báo cho mọi parameters.add

Và nó thậm chí không làm việc, vì các giá trị được chèn là @mcUserName , @mcUserPass, v.v. thay vì các giá trị mà các biến mcUserNameNew và vân vân đang giữ ...

Vì vậy, câu hỏi của tôi là, tôi đang làm điều gì sai, và cách mới để chèn sql lưu làm gì truy vấn?

+3

sử dụng 'AddWithValue' như đề xuất trong báo – Habib

+0

@Habib, thực hiện, cảnh báo đã mất hết, nhưng vẫn không phải là giá trị ngay trong db ...] – Mathlight

Trả lời

24

thử AddWithValue

command.Parameters.AddWithValue("@mcUserName", mcUserNameNew); 
command.Parameters.AddWithValue("@mcUserPass", mcUserPassNew); 
command.Parameters.AddWithValue("@twUserName", twUserNameNew); 
command.Parameters.AddWithValue("@twUserPass", twUserPassNew); 

và không quấn placeholders với dấu nháy đơn.

string SQL = "INSERT INTO `twMCUserDB` (`mc_userName`, `mc_userPass`, `tw_userName`, `tw_userPass`) VALUES (@mcUserName, @mcUserPass, @twUserName, @twUserPass)"; 
+0

Xong, các cảnh báo đã biến mất, nhưng vẫn không phải dữ liệu phù hợp trong db ... – Mathlight

+3

và không bao bọc giá trị với một dấu nháy đơn. xem cập nhật của tôi –

+0

Điều đó đã làm được điều đó. Cảm ơn bạn – Mathlight

0

@mcUserName có để phù hợp với mc_userName trong truy vấn ..

nên parm của bạn nên được @mc_userName

+0

JW đã sửa nó, mặc dù câu trả lời của bạn CÓ THỂ là đúng ... – Mathlight

-1

Đây là mã VB ...

cmd.Parameters.AddWithValue("@number", 1) 'set @number as numeric 
cmd.Parameters.AddWithValue("@text", "this will be a text variable") 

cmd.Parameters("@number").Value = 321 'now @number has a value 
cmd.Parameters("@text").Value = "A string value" 'now @text has a value 

cmd.ExecuteNonQuery() 
+0

tôi nghĩ bạn sẽ thấy rằng bạn nên sử dụng dấu ngoặc vuông xung quanh tên tham số để 'cmd.Parameters ["@ number"]. Value = 321' –

0

Chỉ cần chỉnh sửa/xóa một số mã trong phần này

('@mcUserName', '@mcUserPass', '@twUserName', '@twUserPass') 

để

(@mcUserName, @mcUserPass, @twUserName, @twUserPass) 

và Thêm (để AddWithValue (