【问题标题】:WPF C# insert to mysql AddWithValueWPF C# 插入到 mysql AddWithValue
【发布时间】:2017-02-09 14:38:29
【问题描述】:

我有一个插入语句

 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);

这行得通。

但我想像这样在插入语句中使用@values:

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

这给了我一个 mysql 错误。

@values 的单词似乎有 ''。 这个怎么删?

【问题讨论】:

  • 您不能使用参数来引用字段名称。为什么要这样做?
  • 好的,我希望用户可以决定他想在哪个字段中写入时间..
  • 如果您为用户提供预先确定的字段列表,他/她可以选择字段,那么您可以安全地使用字符串连接的形式插入要更新/插入的字段
  • 你可能想看看这个。它处理您的参数,例如 .AddWithValue.Add 相比,虽然起初很少,但它可以节省您。 blogs.msmvps.com/jcoehoorn/blog/2014/05/12/…

标签: c# sql wpf insert


【解决方案1】:

您的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);

【讨论】:

  • 但是我怎么能意识到用户可以决定时间应该写在哪个表行?
【解决方案2】:

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

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

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

这样

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

表示考虑去掉AddWithValue的使用。这个快捷方式has big drawbacks,特别是当您传递一个字符串变量(文本)并期望它正确地将您的文本转换为日期时间值时。 改用 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;

【讨论】:

  • 很高兴能提供帮助。作为该网站的新用户,我建议您阅读How does accepting an answer works,然后确定此处的任何答案是否有助于您解决问题
猜你喜欢
  • 1970-01-01
  • 2014-12-03
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 2023-04-08
相关资源
最近更新 更多