【发布时间】:2017-08-22 15:41:53
【问题描述】:
我正在尝试运行一个 SQL 命令,将列中的所有项目保存回数据库表。用户输入此信息,当他们关闭窗口时,新输入的信息应保存回数据库。我正在尝试使用 SQL 连接和 SQL 命令来执行此操作。问题是当我输入信息并关闭窗口时,我在comm.ExecuteNonQuery() 收到一个错误,上面写着“',' 附近的语法不正确。”考虑到我在在线 SQL 语法检查器中输入了我的语法并且一切正常,我不确定我的命令中的确切位置存在问题。下面是我的Window_Closing 事件代码:
public void Window_Closing(object sender, CancelEventArgs e)
{
var checkNoValue = ((DataProperties)gridView.SelectedItem).Check_No;
var checkDateValue = ((DataProperties)gridView.SelectedItem).Check_Date;
SqlConnection conn;
SqlCommand comm;
string connstring = "server = testserver; database = test; user = someusername; password = somepassword";
conn = new SqlConnection(connstring);
conn.Open();
comm = new SqlCommand("insert into DeductionInfo (" + gridView.Columns["checkNo"] + ", " + gridView.Columns["checkDate"] + ") values (" + checkNoValue + ", " + checkDateValue + ")", conn);
comm.ExecuteNonQuery();
MessageBox.Show("Saved");
}
我正在尝试将新数据插入到位于我的数据库中的 DeductionInfo 数据表中。我想我可以猜出问题出在哪里,因为我将checkNoValue 和checkDateValue 设置为我的gridView.SelectedItem 属性,但是我不确定如何将其设置为这些特定列中的每个值(我正在使用顺便说一下 Telerik 的 RadGridView)。请记住,Check_No 是一个整数,Check_Date 是一个日期时间。我处理这一切都是错的还是我走在正确的轨道上?这是我第一次在 WPF 和 C# 中处理 SQL 查询,所以我对此很陌生。任何帮助将不胜感激:)
【问题讨论】:
-
尝试使用参数而不是使用变量创建插入命令。
-
旁注:一次性物品使用
using。 -
DeductionInfo 表中列的实际名称是什么?这些不是动态的......
-
您应该阅读有关 SQL 注入的信息:stackoverflow.com/questions/7505808/…
-
感谢您的回复。我的列的实际名称是“Check_No”和“Check_Date”,它们是在一个名为“DataProperties”的单独类中定义的,因此我对 checkNoValue 和 checkDateValue 进行了转换。
标签: c# sql wpf ado.net radgridview