6

我有一个 ASP.NET 应用程序和一个 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

4

7 回答 7

11

你应该简单地执行命令

....
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();
于 2012-11-28T11:42:15.457 回答
7

您忘记通过调用 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. 用 using 包裹一次性物品。在 MySqlConnection 的情况下,它会在超出范围时正确关闭并处理连接。
  2. 在查询中传递值时使用 SQL 参数。这将避免 SQL 注入,并且更容易维护。
  3. 就个人而言,我喜欢在一个函数中有一个退出点。在此示例中,“stringToReturn”变量保存函数执行成功或失败时返回的值。
于 2012-11-28T12:17:13.877 回答
6

要进行插入/更新/删除,您应该添加

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

对于 select () 来显示来自数据库的数据使用:

connection.Open();
command.ExecuteReader();
于 2012-11-28T11:50:11.850 回答
3

{
string MyConnection2 = "datasource=localhost;port=3306;username=root;password=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);  
  }  

}

于 2017-05-06T01:28:07.790 回答
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();
 }
于 2012-11-28T11:42:30.120 回答
1

你错过了写这个: -

 ....
 connection.Open();
 command.ExecuteNonQuery();
 ....
于 2012-11-28T11:42:46.040 回答
0

您还可以使用 Sql 参数来防止 Sql Injection

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();
}
于 2017-07-29T06:53:17.563 回答