gpt4 book ai didi

c# - oledbexception 是插入语句中未处理的语法错误

转载 作者:太空宇宙 更新时间:2023-11-03 19:53:13 27 4
gpt4 key购买 nike

如果我犯了错误,我似乎无法理解。

        OleDbCommand command = new OleDbCommand();

command.Connection = connection;
command.CommandText = "INSERT INTO statement workers values(?,?,?,?,?,?,?,?,?)";
command.Parameters.AddWithValue("@Tab", tabtextBox1.Text);
command.Parameters.AddWithValue("@User", usertextBox2.Text);
command.Parameters.AddWithValue("@Pass", passtextBox4.Text);
command.Parameters.AddWithValue("@Names", namestextBox3.Text);
command.Parameters.AddWithValue("@Tele", teletextBox6.Text);
command.Parameters.AddWithValue("@Job", jobtextBox9.Text);
command.Parameters.AddWithValue("@Pay", paytextBox7.Text);
command.Parameters.AddWithValue("@Date", dateofdateTimePicker2.Value.ToShortDateString());
command.Parameters.AddWithValue("@DOB", dobdateTimePicker1.Value.ToShortDateString());
command.ExecuteNonQuery();


MessageBox.Show("Data Saved");

在我尝试插入详细信息后,它给出了响应:

oledbexception was unhandled syntax error in insert into statement

最佳答案

当表名或列名包含空格或者是reserved word您需要将该名称括在方括号中,以避免混淆为解释您的命令而调用的 sql 解析器。
在你的上下文中你应该写

command.CommandText = "INSERT INTO [statement workers] values(?,?,?,?,?,?,?,?,?)";

编辑
查看您的字段名称(并假设字段的顺序与您输入的顺序完全相同)后,您应该更改添加参数的顺序以与表中字段的顺序完全匹配。
OleDb 不能使用命名占位符来设置参数集合,因此,严格遵守字段顺序很重要。
如果您不这样做,那么一个值可能会出现在不同的字段中并产生问题,例如当您尝试在日期字段中存储小数值时。 (当然,如果你在表名后面加上列名,顺序是可以改变的)

command.Connection = connection;
command.CommandText = "INSERT INTO statement workers values(?,?,?,?,?,?,?,?,?)";
command.Parameters.Add("@Tab", OleDbType.Integer).Value = Convert.ToInt32( tabtextBox1.Text);
command.Parameters.Add("@User", OleDbType.VarWChar).Value = usertextBox2.Text;
command.Parameters.Add("@Pass", OleDbType.VarWChar).Value = passtextBox4.Text;
command.Parameters.Add("@Names", OleDbType.VarWChar).Value = namestextBox3.Text;
command.Parameters.Add("@Tele", OleDbType.Integer).Value = Convert.ToInt32(teletextBox6.Text);
command.Parameters.Add("@Job", OleDbType.VarWChar).Value = jobtextBox9.Text;
command.Parameters.Add("@Date", OleDbType.Date).Value = dateofdateTimePicker2.Value;
command.Parameters.Add("@DOB", OleDbType.Date).Value = dateTimePicker1.Value);
command.Parameters.Add("@Pay", OleDbType.Decimal).Value = Convert.ToDecimal(paytextBox7.Text);
command.ExecuteNonQuery();

通过这种方式,您可以按照表格字段所期望的准确顺序设置值。
请注意,我已经删除了危险的 AddWithValue,更精确的 Add 后跟字段预期的数据类型。
AddWithValue 无法知道数据库期望的类型是什么,因此会查看参数的类型。由于您传递了所有字符串,因此数据库引擎被迫将它们转换回预期的字段类型。
有时(特别是日期和小数字段)这不能正常工作。

旁注:

  1. 电话号码不应存储为数字,它们不是。
  2. 从安全的角度来看,永远不要将密码存储在明文。有很多文章解释了这有多危险以及如何散列密码。您可以从这里开始搜索:Best way to store password in database

关于c# - oledbexception 是插入语句中未处理的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36308290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com