C # con los parámetros de MySQL INSERT

Buenos días a todos, estoy usando Visual C # 2010 y MySQL versión 5.1.48-community. Espero que me puedas ayudar con este código. No lo encuentro funcionando 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 intento compilarlo. Dice:

La columna de persona no puede ser nula

EDITADO:

Pero cuando intento este código.

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

Pero este código es propenso al ataque de inyección de 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 a 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:Resuelto 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!

 Rémi23 abr. 2013 16:16
Actualmente trabajo con vs2008 y lo uso. En mi universidad teníamos vs2010 y estábamos usando AddWithValue
 Boy Karton23 abr. 2013 16:21
De Verdad? Esto sale cuando usé AddWithValue.MySql.Data.MySqlClient.MySqlParameterCollection' does not contain a definition for 'AddWithValue' and no extension method 'AddWithValue' accepting a first argument of type 'MySql.Data.MySqlClient.MySqlParameterCollection' could be found (are you missing a using directive or an assembly reference?)
 Boy Karton23 abr. 2013 16:07
Ahí. Tengo una excepción encmd.ExecuteNonQuery(); Si lo se. Usted ve que estoy usando Visual C # 2010 e intenté usar AddWithValue pero parece que 2010 no lo admite. Aunque no sé si tengo razón.
 Rémi23 abr. 2013 16:01
¿Podría publicar la excepción exacta que está recibiendo? Normalmente, debe usar AddWithValue como se indica en todos los demás. Agregar se deprecia por lo que no debe usarlo

Respuestas a la pregunta(9)

prueba esto esta funcionando

 MySqlCommand dbcmd = _conn.CreateCommand();
    dbcmd.CommandText = sqlCommandString;
    dbcmd.ExecuteNonQuery();
    long imageId = dbcmd.LastInsertedId;
comm.Parameters.Add("person", "Myname");
 Boy Karton23 abr. 2013 13:19
Todavía me da un error. No sé qué me estoy perdiendo.

SqlDbType" para que coincida con su tipo de base de datos si es necesario y use 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 de forma implícita, que puede romperse de vez en cuando Convertir el tipo de datos.

Espero que esto ayude.

 Boy Karton23 abr. 2013 16:10
Todavía no funciona. Incluso traté de volver a escribir todo. Sigue siendo el mismo error. No sé dónde me equivoqué.
 user231020123 abr. 2013 15:19
¿Has intentado agregar en la base de datos con un cuadro de texto? Tratar:
 Boy Karton23 abr. 2013 15:01
He intentado hacer estocmd.Parameters.Add("@person", MySqlDbType.VarChar).Value = "myname"; y sigue siendo el mismo error. No se donde me equivoque
 user231020123 abr. 2013 15:43
comm.Parameters.Add ("@ person", SqlDbType.VarChar) .Value = TextBox1.Text; // Ver si el error sigue ocurriendo así.

Utilizar elAddWithValue método:

comm.Parameters.AddWithValue("@person", "Myname");
comm.Parameters.AddWithValue("@address", "Myaddress");
 Habib23 abr. 2013 13:20
@BoyKarton, puede estar con su versión de conector MySql, debe eliminar@ firmar y reemplazarlo con?.
 Boy Karton23 abr. 2013 13:22
Traté de cambiar todo @ a? y sí. No me da errores pero no se inserta en mi base de datos.
 Hossein Narimani Rad23 abr. 2013 13:22
@BoyKarton ve si el comentario de Habib resuelve el problema.
 Boy Karton23 abr. 2013 13:18
No puedo hacer eso. Me da un error Solo me deja usar comm.Parameters.Add ("@ person", <Value>)

y funcionó.

Según los documentos:

Nota. Las versiones anteriores del proveedor utilizaron 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 '?' Símbolo para localizar parámetros en SQL. Para admitir el código anterior, puede establecer 'sintaxis antigua = sí' en su cadena de conexión. Si lo hace, tenga en cuenta que no se lanzará una excepción si no define un parámetro que deseaba usar en su SQL.

De Verdad? ¿Por qué no lanza una excepción si alguien intenta usar la sintaxis llamada anterior? Unas pocas horas por el desagüe para un programa de 20 líneas ...

MySQL :: MySQLCommand

Lo que hice es 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();
 G_V12 feb. 2018 15:19
¿Puedes agregar lo que tu respuesta hace diferente por favor? Explicar lo que hiciste ayuda a los futuros lectores a comprender más rápido y a obtener más repeticiones.

usar elusing declaración, usoAddWithValue y prefijo los parámetros con? y añadirAllow 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();
      co,mm.CommandText = "INSERT INTO room(person,address) VALUES(@person, @address)";
      comm.Parameters.AddWithValue("?person", "Myname");
      comm.Parameters.AddWithValue("?address", "Myaddress");
      comm.ExecuteNonQuery();
  }

Ver tambiénhttp://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx para más información sobre el uso del comando, yhttp://dev.mysql.com/doc/refman/5.1/en/connector-net-connection-options.html para obtener información sobre la opción Permitir variables del usuario (Sólo se admite en la versión 5.2.2 y superior.).

 Boy Karton23 abr. 2013 13:31
Sí, pero no es compatible.
 L-Four23 abr. 2013 13:45
¿Qué versión de mysql estás usando?
 Boy Karton23 abr. 2013 13:39
Aquí. Agregué Permitir variables de usuario, pero dice que no es compatible. connectionString = "Servidor = localhost; Base de datos = super; uid = root; contraseña = root; Permitir variables del usuario = true;"
 Boy Karton23 abr. 2013 13:52
Estoy usando la versión 5.1.48 de la comunidad. No tengo ni idea de lo que está mal con mi código.
 L-Four23 abr. 2013 13:54
Permitir variables de usuario no es compatible con esa versión, verdev.mysql.com/doc/refman/5.1/en/…. Creo que es posible que necesite actualizar.
 L-Four23 abr. 2013 13:24
¿agregaste AllowUserVariables = true a tu cadena de conexión?
 Boy Karton23 abr. 2013 13:24
Aún así ... el mismo error.
 L-Four23 abr. 2013 13:34
lo hizo como: ConnectionString = "DataSource = xx; Database = test; UserID = xx; Password = xx; PORT = xx; Allow Zero Datetime = True; permita que las variables del usuario = true"; ? Tal vez muestre su cadena de conexión ... (es compatible desde la versión 5.2.2, ¿qué versión tiene?)

lizando mysql-connector-net-5.1.7-noinstall y Visual Studio (2015) en la aplicación Windows Form. No soy un gurú de C #. Por lo tanto, se tarda alrededor de 2 horas para 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);
    }
}

Puedes utilizarAddWithValue método 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@, me gusta:

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...

 Boy Karton23 abr. 2013 13:26
Estoy usando Visual C # 2010 Express. El primero no me deja usar AddWithValue ... Y ya probé el segundo ... No me da errores pero no se inserta en mi base de datos.
 avs09925 jul. 2018 17:24
esto es tan confuso ... doc oficial dice uso@ - dev.mysql.com/doc/connector-net/en/… - Pero no funcionó para mí, y solo? hizo.

Su respuesta a la pregunta