2012-11-28 50 views
3

我有一個ASP.NET應用程序和一個MySQL數據庫。我想寫一個類來插入,刪除和顯示數據庫中的數據。我有一個到數據庫的連接,但我無法在數據庫中插入數據。如何在MySQL數據庫中插入數據?

我的班級插入方法:

public string CreateEntry(string Connectionstring, string mitarbeiter) 
{ 
    connection = new MySqlConnection(Connectionstring); 
    try 
    { 
     var command = connection.CreateCommand(); 
     command.CommandText = "INSERT INTO tb_mitarbeiter (Vorname) VALUES ('tom')"; 
     connection.Open(); 
     return "Mitarbeiter wurde angelegt"; 
    } 
    catch (Exception ex) 
    { 
     return ex.Message; 
    } 
    finally 
    { 
     connection.Close(); 
    } 
} 

Connectionstring是正確的。我沒有收到錯誤,但數據庫中沒有數據。

我的表名:tb_mitarbeiter 列:ID和Vorname

+1

我從來沒有使用MySQL,但我想你忘了下一個塊:儘量 { connection.ExecuteNonQuery( ); } –

+1

好的做法是直接SQL中使用的參數,以避免注射 –

回答

7

您應該簡單地執行命令

.... 
MySqlCommand command = connection.CreateCommand(); 
command.CommandText = "INSERT INTO tb_mitarbeiter (Vorname) VALUES ('tom')"; 
connection.Open(); 
command.ExecuteNonQuery(); 
.... 

我想這是mitarbeiter應在數據庫中設置的實際價值。
如果是這樣的話記得要使用參數來插入/更新數據

MySqlCommand command = connection.CreateCommand(); 
command.CommandText = "INSERT INTO tb_mitarbeiter (Vorname) VALUES (?name)"; 
command.Parameters.AddWithValue("?name", mitarbeiter); 
connection.Open(); 
command.ExecuteNonQuery(); 
1

你沒有執行命令使用SqlCommand.ExecuteNonQuery

try 
{ 
     MySqlCommand command = connection.CreateCommand(); 
     command.CommandText = "INSERT INTO tb_mitarbeiter (Vorname) VALUES ('tom')"; 
     connection.Open(); 
     command.ExecuteNonQuery(); 
     return "Mitarbeiter wurde angelegt"; 
} 
catch (Exception ex) 
{ 
     return ex.Message; 
} 
finally 
{ 
     connection.Close(); 
} 
1

你錯過了寫這篇文章: -

.... 
connection.Open(); 
command.ExecuteNonQuery(); 
.... 
6

要做一個插入/更新/刪除你應該添加

connection.Open(); 
command.ExecuteNonQuery(); 

對於選擇()來顯示從數據庫中的數據:

connection.Open(); 
command.ExecuteReader(); 
5

你忘記調用command.ExecuteNonQuery執行命令()。這是我通常會做到這一點:

public string CreateEntry(string connectionString, string valueToInsert) 
{ 
    var stringToReturn = ""; 

    try 
    { 
     using(var connection = new MySqlConnection(connectionString)) 
     { 
      //Open connection 
      connection.Open(); 

      //Compose query using sql parameters 
      var sqlCommand = "INSERT INTO table_name (field_name) VALUES (@valueToInsert)"; 

      //Create mysql command and pass sql query 
      using(var command = new MySqlCommand(sqlCommand, connection)) 
      { 
       command.Parameters.AddWithValue("@valueToInsert", valueToInsert); 
       command.ExecuteNonQuery(); 
      }   

      stringToReturn ="Success Message"; 
     } 
    } 
    catch(exception ex) 
    { 
     stringToReturn = "Error Message: " + ex.Message; 
    } 

    return stringToReturn; 
} 

有幾個關鍵的事情要記住:

  1. 總結了使用一次性物品。在 MySqlConnection的情況下,當它超出範圍時,它將正確關閉並處置連接 。
  2. 在將查詢中的值傳遞給 時使用SQL參數。這將避免SQL注入,並且它更容易維護。
  3. 就我個人而言,我喜歡在 函數中有一個退出點。在此示例中,一旦函數成功執行 ,或者發生故障,「stringToReturn」變量就會保留 的值以返回值。
0

{
串MyConnection2 = 「數據源=本地主機;端口= 3306;用戶名=根;密碼= 1234」;

 string Query = "insert into DBname.TableName(id,Name,First_Name,Age,Address) values('" +this.IdTextBox.Text+ "','" +this.NameTextBox.Text+ "','" +this.FirstnameTextBox.Text+ "','" +this.AgeTextBox.Text+ "','" +this.AddressTextBox.Text+ "');"; 

     MySqlConnection MyConn2 = new MySqlConnection(MyConnection2); 

     MySqlCommand MyCommand2 = new MySqlCommand(Query, MyConn2); 
     MySqlDataReader MyReader2; 
     MyConn2.Open(); 
     MyReader2 = MyCommand2.ExecuteReader();  
     MessageBox.Show("Save Data"); 
     while (MyReader2.Read()) 
     {      
     } 
     MyConn2.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 

}

0

您也可以使用SQL參數來防止SQL注入

try 
{ 
    MySqlCommand command = connection.CreateCommand(); 

    command.CommandText = @"INSERT INTO `tb_mitarbeiter` (`Vorname`) VALUES (@tom)"; 
    command.Parameters.AddWithValue("@tom", tom); 
    connection.Open(); 
    command.ExecuteNonQuery(); 

    return "Mitarbeiter wurde angelegt"; 
} 
catch (Exception ex) 
{ 
    return ex.Message; 
} 
finally 
{ 
    command.Dispose(); 
    command.Close(); 
    connection.Close(); 
}