it-swarm.com.de

C # mit MySQL-INSERT-Parametern

Guten Tag für alle, ich verwende Visual C # 2010 und MySQL Version 5.1.48-Community. Ich hoffe, dass Sie mir mit diesem Code helfen können. Ich finde es nicht bei mir. Was vermisse ich?

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

Und wenn ich versuche, es zu kompilieren. Es sagt:

Personenspalte darf nicht null sein

BEARBEITET:

Aber wenn ich diesen Code probiere. 

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

Dieser Code ist jedoch anfällig für SQL-Injection-Angriffe, aber er funktioniert, gibt mir keinen Fehler. 

BEARBEITET:

Ich habe versucht, dies zu nutzen. Ich fand es hier also dachte ich, es würde funktionieren, gibt mir aber diesen Fehler

Der Index (nullbasiert) muss größer oder gleich Null und kleiner als .__ sein. die Größe der Argumentliste.

Irgendeine Idee?

    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

Jede Hilfe wäre sehr dankbar.

EDITED: GELÖST Ich habe diesen Code verwendet:

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

Danke SO!

26
Boy Karton

Sie können die AddWithValue-Methode wie folgt verwenden:

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

OR

Versuchen Sie es mit ? anstelle von @ wie:

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

Ich hoffe es hilft...

18
Rahul

Verwenden Sie die AddWithValue-Methode:

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

Ich hatte das gleiche Problem - Endlich versucht das? Siegel statt @, und es hat funktioniert.

Laut den Unterlagen:

Hinweis. In früheren Versionen des Anbieters wurde das "@" -Symbol verwendet, um Parameter in SQL zu kennzeichnen. Dies ist nicht mit MySQL-Benutzervariablen kompatibel, daher verwendet der Provider jetzt das '?' Symbol zum Auffinden von Parametern in SQL. Um älteren Code zu unterstützen, können Sie in Ihrer Verbindungszeichenfolge "alte Syntax = yes" festlegen. Wenn Sie dies tun, beachten Sie bitte, dass keine Ausnahme ausgelöst wird, wenn Sie keinen Parameter definieren, den Sie in Ihrer SQL verwenden wollten.

"Ja wirklich?" Warum werfen Sie nicht einfach eine Ausnahme, wenn jemand versucht, die sogenannte alte Syntax zu verwenden? Ein paar Stunden für ein Programm mit 20 Leitungen ...

MySQL :: MySQLCommand

4
Gerard ONeill

Beim Versuch, Daten mit mysql-connector-net-5.1.7-noinstall und Visual Studio (2015) in der Windows Form-Anwendung einzufügen, habe ich ein ähnliches Problem festgestellt. Ich bin kein C # -Guru. Es dauert also ungefähr 2 Stunden, um alles zu lösen. 

Der folgende Code funktioniert in letzter Zeit:

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);
    }
}
2
arsho

Drei Dinge: Verwenden Sie die Anweisung using, verwenden Sie AddWithValue und Präfixparameter mit? und fügen Sie Allow User Variables=True zur Verbindungszeichenfolge hinzu.

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

Unter http://msdn.Microsoft.com/de-de/library/system.data.sqlclient.sqlcommand.parameters.aspx finden Sie weitere Informationen zur Befehlsverwendung und http: // dev. Weitere Informationen zur Option Allow User Variables erhalten Sie unter mysql.com/doc/refman/5.1/de/connector-net-connection-options.html (wird nur in Version 5.2.2 und höher) unterstützt.

2
L-Four
comm.Parameters.Add("person", "Myname");
0
DarkBee

Was ich getan habe, ist so.

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