簡體   English   中英

帶有MySQL INSERT參數的C#

[英]C# with MySQL INSERT parameters

祝大家好,我正在使用Visual C#2010和MySQL版本5.1.48社區。 我希望你能幫我解決這個問題。 我覺得它不適合我。 我錯過了什么?

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

當我嘗試編譯它時。 它說:

Person列不能為null

編輯:

但是,當我嘗試這個代碼。

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

但是這段代碼很容易受到sql注入攻擊,但它有效,不會給我一個錯誤。

編輯:

我試着用這個。 我發現它在這里,所以我認為它會工作,但給了我這個錯誤

索引(從零開始)必須大於或等於零且小於參數列表的大小。

任何想法?

    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

任何幫助將非常感激。

編輯:已解決我使用此代碼:

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

謝謝!

您可以使用AddWithValue方法,如:

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

要么

嘗試用? 而不是@ ,如:

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

希望能幫助到你...

使用AddWithValue方法:

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

我有同樣的問題 - 最后嘗試了嗎? sigil而不是@,它起作用了。

根據文件:

注意。 提供程序的早期版本使用“@”符號標記SQL中的參數。 這與MySQL用戶變量不兼容,因此提供程序現在使用'?' 用於在SQL中查找參數的符號。 要支持舊代碼,可以在連接字符串上設置“old syntax = yes”。 如果您這樣做,請注意,如果您未能定義要在SQL中使用的參數,則不會拋出異常。

真? 如果有人試圖使用所謂的舊語法,為什么不拋出異常呢? 幾個小時的耗水量為20線計划......

MySQL的::的MySqlCommand

三件事:使用using語句,使用AddWithValue和前綴參數? 並將Allow User Variables=True添加到連接字符串。

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

另請參閱http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx以獲取有關命令用法的更多信息,以及http://dev.mysql.com/doc/ refman / 5.1 / en / connector-net-connection-options.html以獲取有關“允許用戶變量”選項的信息( 僅在5.2.2及更高版本中受支持 )。

嘗試使用Windows Form Application中的mysql-connector-net-5.1.7-noinstall和Visual Studio(2015)插入數據時,我遇到了類似的問題。 我不是C#大師。 因此,解決所有問題大約需要2個小時。

以下代碼最近起作用:

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

我做的是這樣的。

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

如有必要,請嘗試調整“SqlDbType”中的代碼以匹配您的數據庫類型,並使用以下代碼:

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

要么:

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

這應該工作,但記住使用Command.Parameters.Add(),您可以定義特定的SqlDbType並使用Command.Parameters.AddWithValue(),它將嘗試隱式地獲取基於參數值的SqlDbType,如果它不能隱式地有時會破壞轉換數據類型。

希望這可以幫助。

試試這個它是有效的

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM