C # con MySQL INSERT parámetros

Buen día para todos, estoy usando Visual C # 2010 y MySQL versión 5.1.48-community. Espero que me puedas ayudar con este código. No creo que funcione en mí. ¿Qué me estoy perdiendo?

string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString; MySqlConnection conn = new MySqlConnection(connString); conn.Open(); MySqlCommand comm = conn.CreateCommand(); comm.CommandText = "INSERT INTO room(person,address) VALUES(@person, @address)"; comm.Parameters.Add("@person", "Myname"); comm.Parameters.Add("@address", "Myaddress"); comm.ExecuteNonQuery(); conn.Close(); 

Y cuando bash comstackrlo Dice:

La columna de persona no puede ser nula

EDITADO:

Pero cuando pruebo este código

 comm.CommandText = "INSERT INTO room(person,address) VALUES('Myname', 'Myaddress')"; 

Pero este código es propenso al ataque de inyección sql, pero funciona, no me da un error.

EDITADO:

Traté de usar esto. Lo encontré aquí, así que pensé que funcionaría pero me da este error

El índice (basado en cero) debe ser mayor o igual que cero y menor que el tamaño de la lista de argumentos.

¿Alguna idea?

  string a = "myname"; MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; cmd.CommandText = "INSERT INTO room(person,address) VALUES(?,?)"; //cmd.Prepare(); cmd.Parameters.Add("person", MySqlDbType.VarChar).Value = a; cmd.Parameters.Add("address", MySqlDbType.VarChar).Value = "myaddress"; cmd.ExecuteNonQuery(); // HERE I GOT AN EXCEPTION IN THIS LINE 

Cualquier ayuda sería muy apreciada.

EDITADO: SOLUCIONADO Utilicé este código:

 cmd.CommandText = "INSERT INTO room(person,address) VALUES(?person,?address)"; cmd.Parameters.Add("?person", MySqlDbType.VarChar).Value = "myname"; cmd.Parameters.Add("?address", MySqlDbType.VarChar).Value = "myaddress"; cmd.ExecuteNonQuery(); 

¡Gracias!

Puede usar el método AddWithValue como:

 string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString; MySqlConnection conn = new MySqlConnection(connString); conn.Open(); MySqlCommand comm = conn.CreateCommand(); comm.CommandText = "INSERT INTO room(person,address) VALUES(@person, @address)"; comm.Parameters.AddWithValue("@person", "Myname"); comm.Parameters.AddWithValue("@address", "Myaddress"); comm.ExecuteNonQuery(); conn.Close(); 

O

Prueba con ? en lugar de @ , como:

 string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString; MySqlConnection conn = new MySqlConnection(connString); conn.Open(); MySqlCommand comm = conn.CreateCommand(); comm.CommandText = "INSERT INTO room(person,address) VALUES(?person, ?address)"; comm.Parameters.Add("?person", "Myname"); comm.Parameters.Add("?address", "Myaddress"); comm.ExecuteNonQuery(); conn.Close(); 

Espero eso ayude…

Use el método AddWithValue :

 comm.Parameters.AddWithValue("@person", "Myname"); comm.Parameters.AddWithValue("@address", "Myaddress"); 

Tuve el mismo problema. ¿Finalmente probé? sigil en lugar de @, y funcionó.

De acuerdo con los documentos:

Nota. Las versiones anteriores del proveedor usaban el símbolo ‘@’ para marcar los parámetros en SQL. Esto es incompatible con las variables de usuario de MySQL, por lo que el proveedor ahora usa el ‘?’ símbolo para ubicar parámetros en SQL. Para admitir código anterior, puede establecer ‘old syntax = yes’ en su cadena de conexión. Si hace esto, tenga en cuenta que no se lanzará una excepción si no define un parámetro que pretendía utilizar en su SQL.

De Verdad? ¿Por qué no lanzas una excepción si alguien intenta usar la llamada syntax antigua? Algunas horas por el desagüe para un progtwig de 20 líneas …

MySQL :: MySQLCommand

Tres cosas: use la instrucción using , use AddWithValue y los parámetros de prefijo con? y agregue Allow User Variables=True a la cadena de conexión.

  string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString; using (var conn = new MySqlConnection(connString)) { conn.Open(); var comm = conn.CreateCommand(); comm.CommandText = "INSERT INTO room(person,address) VALUES(@person, @address)"; comm.Parameters.AddWithValue("?person", "Myname"); comm.Parameters.AddWithValue("?address", "Myaddress"); comm.ExecuteNonQuery(); } 

Consulte también http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx para obtener más información sobre el uso del comando y http://dev.mysql.com/doc/. refman / 5.1 / en / connector-net-connection-options.html para obtener información sobre la opción Permitir variables de usuario ( solo compatible con la versión 5.2.2 y superior ).

Me enfrentaba a un problema muy similar al intentar insertar datos usando mysql-connector-net-5.1.7-noinstall y Visual Studio (2015) en la aplicación Windows Form. No soy un gurú de C #. Entonces, toma alrededor de 2 horas resolver todo.

El siguiente código funciona últimamente:

 string connetionString = null; connetionString = "server=localhost;database=device_db;uid=root;pwd=123;"; using (MySqlConnection cn = new MySqlConnection(connetionString)) { try { string query = "INSERT INTO test_table(user_id, user_name) VALUES (?user_id,?user_name);"; cn.Open(); using (MySqlCommand cmd = new MySqlCommand(query, cn)) { cmd.Parameters.Add("?user_id", MySqlDbType.Int32).Value = 123; cmd.Parameters.Add("?user_name", MySqlDbType.VarChar).Value = "Test username"; cmd.ExecuteNonQuery(); } } catch (MySqlException ex) { MessageBox.Show("Error in adding mysql row. Error: "+ex.Message); } } 
 comm.Parameters.Add("person", "Myname"); 

Lo que hice fue así.

 String person; String address; person = your value; address =your value; string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString; MySqlConnection conn = new MySqlConnection(connString); conn.Open(); MySqlCommand comm = conn.CreateCommand(); comm.CommandText = "INSERT INTO room(person,address) VALUES('"+person+"','"+address+"')"; comm.ExecuteNonQuery(); conn.Close(); 

Intente ajustar el código en “SqlDbType” para que coincida con su tipo de base de datos si es necesario y utilice este código:

 comm.Parameters.Add("@person",SqlDbType.VarChar).Value=MyName; 

o:

 comm.Parameters.AddWithValue("@person", Myname); 

Eso debería funcionar, pero recuerde que con Command.Parameters.Add (), puede definir el SqlDbType específico y con Command.Parameters.AddWithValue (), intentará obtener el SqlDbType en función del valor del parámetro implícitamente, lo que a veces puede romperse si no puede implícitamente convertir el tipo de datos.

Espero que esto ayude.

intenta esto, está funcionando

  MySqlCommand dbcmd = _conn.CreateCommand(); dbcmd.CommandText = sqlCommandString; dbcmd.ExecuteNonQuery(); long imageId = dbcmd.LastInsertedId;