如何在MySQL数据库中插入数据?
我有一个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
是正确的。 我没有收到错误,但数据库中没有数据。
我的tablename:tb_mitarbeiter列:ID和Vorname
您只需执行该命令即可
.... 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();
要进行插入/更新/删除,您应该添加
connection.Open(); command.ExecuteNonQuery();
对于select()来显示数据库使用的数据:
connection.Open(); command.ExecuteReader();
您忘记通过调用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; }
要记住几个关键事项:
- 用一次性包裹一次性物品。 在MySqlConnection的情况下,它将在超出范围时正确关闭并处置连接。
- 在查询中传递值时使用SQL参数。 这将避免SQL注入,并且更容易维护。
- 就个人而言,我喜欢在一个函数中有一个退出点。 在此示例中,“stringToReturn”变量保存一旦函数成功执行或在发生故障时返回的值。
您没有执行命令使用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(); }
你错过了写这个: –
.... connection.Open(); command.ExecuteNonQuery(); ....
{
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); }
}
您还可以使用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(); }