WPF C#插入mysql AddWithValue

时间:2017-02-09 14:38:30

标签: c# sql wpf insert

我有一个插入声明

 command.CommandText = "  insert into system (ziel, comment, status,art) values (@eort,@comment,@statebox,@Eart) ";

statebox后面是一个Combobox。可以在Combobox中选择的每个单词都在我的数据库中创建为一个tablerow。

这里创建了值:

         command.Parameters.AddWithValue("@eort",textBo3x.Text);
         command.Parameters.AddWithValue("@comment", textBox_Copy1.Text);
         command.Parameters.AddWithValue("@statebox", MyComboBox.Text);
         command.Parameters.AddWithValue("@Eart", MyComboBox_Copy1.Text);
         command.Parameters.AddWithValue("@thetime", thetime_insert.Text);

这很有效。

但我想在insert语句中使用@values,如下所示:

 command.CommandText = "  insert into els (ziel, @statebox,comment,status,Eart) values (@eort,@thetime,@comment,@statebox,@Eart) ";

这给了我一个mysql错误。

似乎@values有''在单词。 我怎么能删除这个?

2 个答案:

答案 0 :(得分:2)

下面提到的INSERT声明是错误的。您不能简单地在insert语句中插入一个动态列,该列在表模式中不存在

insert into system (ziel, @statebox,comment,status,Eart)

这只能在SELECT声明的情况下完成,并且下面的操作完全没问题

select ziel, @statebox,comment,status,Eart from `system`

好吧,如果您的列名在变量中,那么构建您的查询字符串,如

string query = string.Format("insert into els (ziel, {0},comment,status,Eart) values ", column_name_variable);

答案 1 :(得分:1)

您不能使用参数来引用字段名称。但是,如果您为用户提供他/她可以选择的预定字段列表,则可以安全地使用字符串连接形式插入要更新/插入的字段。

这意味着您需要一个没有任何编辑功能的组合框,而只需要选择可能的字段。

在您的情况下,似乎这个组合框可能是名为MyComboBox

的组合框

因此

 command.CommandText = @"insert into els 
       (ziel, " + MyComboBox.SelectedItem.ToString() +  
       @",comment,status,Eart) values 
       (@eort,@thetime,@comment,@statebox,@Eart)";

表示考虑删除AddWithValue的使用。这个快捷方式has big drawbacks,特别是在传递字符串变量(Text)并期望它在datetime值中正确翻译文本时。 使用Add方法代替转换和检查输入并为参数指定正确的日期类型。

DateTime dt;
if(!DateTime.TryParse(thetime_insert.Text, out dt);
    // Message, not a valid date....
else
  command.Parameters.Add("@thetime", MySqlDbType.Date).Value = dt;
相关问题