P01*_*107 1 c# mysql syntax wpf
将文本添加到 cpr_txtbx、name_txtbx 和 address_txtbx 后,我将它们转换为要在语句字符串中使用的参数。我正在使用的 MySQL 服务器需要语法:“INSERT INTO people (type, cpr, name, address)” VALUES('cpr', 'name', 'address')"(是的,单引号),我是扯掉我的头发试图找出这里的语法。
我的按钮现在看起来像这样(我知道这是错误的):
private void add_btn_Click(object sender, RoutedEventArgs e)
{
string statement = "INSERT INTO people (type, cpr, name, address)" +
"VALUES('citizen', ':cpr', ':name', ':address')";
this.AUD(statement, 0);
add_btn.IsEnabled = false;
edit_btn.IsEnabled = true;
delete_btn.IsEnabled = true;
}
Run Code Online (Sandbox Code Playgroud)
澳元是:
private void AUD(string statement, int state)
{
string msg = "";
MySqlCommand cmd = conn.CreateCommand();
cmd.CommandText = statement;
cmd.CommandType = CommandType.Text;
switch (state)
{
case 0:
msg = "Borger tilføjet.";
cmd.Parameters.Add("cpr", MySqlDbType.Text, 10).Value = cpr_txtbx.Text;
cmd.Parameters.Add("name", MySqlDbType.Text).Value = name_txtbx.Text;
cmd.Parameters.Add("address", MySqlDbType.Text).Value = address_txtbx.Text;
break;
case 1:
msg = "Borger modificeret.";
cmd.Parameters.Add("address", MySqlDbType.Text).Value = address_txtbx.Text;
break;
case 2:
msg = "Borger slettet.";
cmd.Parameters.Add("cpr", MySqlDbType.Text, 10).Value = cpr_txtbx.Text;
break;
}
try
{
int n = cmd.ExecuteNonQuery();
if ( n > 0 )
{
MessageBox.Show(msg);
this.updateDataGrid();
}
}
catch(MySqlException ex)
{
MessageBox.Show(ex.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
我正在关注的教程在这里:https : //www.youtube.com/watch?v=NiGsgctfiYM
这是我唯一无法开始工作的事情,因此非常感谢任何帮助:)
不要将参数占位符放在 SQL 字符串分隔符中。
错误的:
string statement = "INSERT INTO people (type, cpr, name, address)" +
"VALUES('citizen', ':cpr', ':name', ':address')";
Run Code Online (Sandbox Code Playgroud)
对:
string statement = "INSERT INTO people (type, cpr, name, address)" +
"VALUES('citizen', :cpr, :name, :address)";
Run Code Online (Sandbox Code Playgroud)
回复您的评论:
我再次查看了您正在使用的视频教程,我看到它显示了 Oracle 语法。请记住,尽管使用标准 SQL 语言,但每个 SQL 数据库品牌都有自己的语法。所以你应该使用你使用的品牌的文档和教程。
我不是 C# 开发人员,所以一开始我没有注意到 MySQL 中查询参数的语法与 Oracle 不同。
https://dev.mysql.com/doc/connector-net/en/connector-net-programming-prepared-preparing.html示出了具有一个示例@作为印记为参数来代替:。所以我假设您可以使用以下语法修复您的代码:
string statement = "INSERT INTO people (type, cpr, name, address)" +
"VALUES('citizen', @cpr, @name, @address)";
Run Code Online (Sandbox Code Playgroud)
然后稍后添加值:
cmd.Parameters.AddWithValue("@cpr", cpr_txtbx.Text);
cmd.Parameters.AddWithValue("@name", name_txtbx.Text);
cmd.Parameters.AddWithValue("@address", address_txtbx.Text);
Run Code Online (Sandbox Code Playgroud)