2012-11-27 30 views
20

Robię to C# Windows formularz zgłoszeniowy w visual studio 2010.MySqlCommand Command.Parameters.Add jest przestarzała

To aplikacja łączy się z bazą danych MySQL i chcę wstawić dane w nim.

Teraz mam ten fragment kodu:

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(); 

połączenie jest w porządku. To działa.

Przeczytałem here, że sposób, w jaki mam teraz, jest sposobem zapisu zapytań. Czy to nadal prawda?

A teraz na prawdziwe pytanie. Z tym kodem powyżej, pojawia się następujące ostrzeżenie w 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)"' 

To jest ostrzeżenie dla każdego parameters.add

I to nawet nie działa, ponieważ wartości, które są wkładane są @mcUserName , @mcUserPass i tak dalej, zamiast wartości, które zmienne mcUserNameNew itd. trzymają ...

Moje pytanie brzmi: czy robię coś nie tak i jaki jest nowy sposób na wtrysk sql pytanie?

+3

użycie 'AddWithValue' jak zasugerowano w ostrzeżeniu – Habib

+0

@Habib, zrobione, ostrzeżenia zostaną usunięte, ale nadal nie prawo wartość w db ...] – Mathlight

Odpowiedz

24

spróbować AddWithValue

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

i nie owijać zastępcze z apostrofami.

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

Gotowe, ostrzeżenia zniknęły, ale nadal nie są właściwe dane w db ... – Mathlight

+3

i nie zawijaj wartości za pomocą pojedynczego cudzysłowu. zobacz moją aktualizację –

+0

To wystarczyło. Dziękujemy – Mathlight

0

@mcUserName musi dopasować mc_userName w zapytaniu ..

więc parmezanem powinny być @mc_userName

+0

JW już to naprawił, chociaż odpowiedź może być prawdziwa ... – Mathlight

-1

Jest to kod 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

Myślę, że przekonasz się, że powinieneś używać kwadratowych nawiasów wokół nazwy parametru, więc "cmd.Parameters [" @ number "]. Wartość = 321 ' –

0

tylko edytować/usuń kod z tej części

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

do

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

i dodać (do AddWithValue (

Powiązane problemy