2011-04-22 57 views
0

我有找回了一些內容,並進入其數據庫中的代碼:爲什麼這個代碼輸入兩個條目到數據庫

MySqlConnection conn = new MySqlConnection(@"connection string"); 
    MySqlCommand cmd = new MySqlCommand("INSERT INTO copy (id) VALUES ('" + Page.User.Identity.Name + "')", conn); 
    MySqlCommand cmd2 = new MySqlCommand("INSERT INTO copy (cv) VALUES ('" + mainEditor.Content.Replace("'", "''") + "')",conn); 

    conn.Open(); 
    cmd.ExecuteNonQuery(); 
    cmd2.ExecuteNonQuery(); 

    conn.Close(); 

它連接並進入數據不錯,但它進入兩個而不是一個數據(它創建兩行,而不是一個)

我使用asp.net 3.5和MySQL 5.0 什麼我做錯了什麼,謝謝。

回答

2

這是因爲兩個單獨的插入正在運行。您可以將多個值,試試這個:

MySqlCommand cmd = new MySqlCommand("INSERT INTO copy (id, cv) VALUES ('" + Page.User.Identity.Name + "', '" + mainEditor.Content.Replace("'", "''") + "')", conn); 

您可以用逗號分隔的字段和值,所以它插入一條記錄。執行2個插入命令將始終創建2個記錄。

3

它插入兩行,因爲您正在執行兩個INSERT語句。每次運行INSERT時,都會這樣做:插入一行。

我猜你想創建一個單一行,並填寫了idcv字段。造成這種情況的SQL語法INSERT INTO copy (id, cv) VALUES ('x', 'y');

所以:

MySqlCommand cmd = new MySqlCommand("INSERT INTO copy (id) VALUES ('" + Page.User.Identity.Name + "', '" + mainEditor.Content.Replace("'", "''") + "')",conn); 
+1

如果他們必須分開,你可以運行一個INSERT語句,然後運行一個UPDATE語句 – Tbone 2011-04-22 23:27:31

+0

聽起來'id'或者是'PRIMARY KEY'或者被定義爲'UNIQUE'。在任何一種情況下,您都不能插入多個具有相同值的行,並且您已經有一行'0'。 – VoteyDisciple 2011-04-22 23:58:56

0

你沒有說你正在使用,所以我會用我發現dotConnect的文檔的驅動程序。我會嘗試使用這些方針的東西(下面的代碼解釋)

using(var conn = new MySqlConnection(@"connection string")) 
using(cmd = new MySqlCommand("", conn)){ 

    cmd.CommandText = @" 
     INSERT INTO copy (id, cv) 
     VALUES (:name, :userContent)"; 

    cmd.Parameters.Add("name", MySqlType.[correct type]]).Value = Page.User.Identity.Name; 
    cmd.Parameters.Add("userContent", MySqlType.[correct type], [column size]).Value = mainEditor.Content; 

    conn.Open(); 
    cmd.ExecuteNonQuery(); 
    conn.Close(); 
} 

使用該using構建的是因爲MySqlConnectionMySqlCommand類都實現了IDisposable接口,因此需要對它們進行配置,當你的使用它們來避免可能的資源泄漏。

:name:userContent是我在創建parametrized queries的文檔中找到的。這將允許數據庫驅動程序負責從用戶輸入中轉義所有特殊字符以避免SQL注入攻擊。這部分其實非常重要,那裏有一些非常複雜的SQL注入攻擊,所以有一個很好的機會僅僅逃脫'是不夠的。