Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在insert into语句中未处理OLEDBEException语法错误_C#_Ms Access - Fatal编程技术网

C# 在insert into语句中未处理OLEDBEException语法错误

C# 在insert into语句中未处理OLEDBEException语法错误,c#,ms-access,C#,Ms Access,如果我犯了错误,我似乎无法理解 OleDbCommand command = new OleDbCommand(); command.Connection = connection; command.CommandText = "INSERT INTO statement workers values(?,?,?,?,?,?,?,?,?)"; command.Parameters.AddWithValue("@Tab", tabt

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

        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");
在我尝试插入详细信息后,它会给我回复:

在insert into语句中未处理OLEDBEException语法错误


当表名或列名包含空格或空格时,需要将该名称括在方括号中,以避免混淆为解释命令而调用的sql解析器。
在你的语境中,你应该写作

command.CommandText = "INSERT INTO [statement workers] values(?,?,?,?,?,?,?,?,?)";
编辑
查看字段名称(并假设字段的顺序与您键入的字段的顺序完全相同)后,您应该更改添加参数的顺序,以便与表中字段的顺序完全匹配。
OleDb不能使用命名占位符来设置参数集合,因此,严格遵循字段顺序非常重要。
如果不这样做,则值可能会出现在另一个字段中,并产生问题,例如,当您尝试在日期字段中存储十进制值时。(当然,如果在表名之后添加列名,则可以更改顺序)

通过这种方式,您可以按照表字段期望的准确顺序设置值。
请注意,我已删除了危险的
AddWithValue
,后面是字段所需的数据类型,后面是更精确的
Add

AddWithValue无法知道数据库所需的类型,因此无法查看参数的类型。由于您传递了所有字符串,因此数据库引擎将被迫将它们转换回预期的字段类型。
有时(特别是日期和十进制字段),这无法正常工作

旁注:

  • 电话号码不应存储为号码,它们不是
  • 从安全角度来看,密码永远不应该存储在 明文。有许多文章解释了这是多么危险以及如何散列密码。您可以从以下位置开始搜索:

  • 当表名或列名包含空格或空格时,需要将该名称括在方括号中,以避免混淆为解释命令而调用的sql解析器。
    在你的语境中,你应该写作

    command.CommandText = "INSERT INTO [statement workers] values(?,?,?,?,?,?,?,?,?)";
    
    编辑
    查看字段名称(并假设字段的顺序与您键入的字段的顺序完全相同)后,您应该更改添加参数的顺序,以便与表中字段的顺序完全匹配。
    OleDb不能使用命名占位符来设置参数集合,因此,严格遵循字段顺序非常重要。
    如果不这样做,则值可能会出现在另一个字段中,并产生问题,例如,当您尝试在日期字段中存储十进制值时。(当然,如果在表名之后添加列名,则可以更改顺序)

    通过这种方式,您可以按照表字段期望的准确顺序设置值。
    请注意,我已删除了危险的
    AddWithValue
    ,后面是字段所需的数据类型,后面是更精确的
    Add

    AddWithValue无法知道数据库所需的类型,因此无法查看参数的类型。由于您传递了所有字符串,因此数据库引擎将被迫将它们转换回预期的字段类型。
    有时(特别是日期和十进制字段),这无法正常工作

    旁注:

  • 电话号码不应存储为号码,它们不是
  • 从安全角度来看,密码永远不应该存储在 明文。有许多文章解释了这是多么危险以及如何散列密码。您可以从以下位置开始搜索:

  • 此外,必须使用DateTimePicker的值,而不是字符串:

    command.Parameters.AddWithValue("@Date", dateofdateTimePicker2.Value);
    command.Parameters.AddWithValue("@DOB", dobdateTimePicker1.Value);
    
    并说明字段名称:

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

    此外,必须使用DateTimePicker的值,而不是字符串:

    command.Parameters.AddWithValue("@Date", dateofdateTimePicker2.Value);
    command.Parameters.AddWithValue("@DOB", dobdateTimePicker1.Value);
    
    并说明字段名称:

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


    我已经试过了,但是我仍然得到相同的错误是相同的语法错误还是现在不同了?您确定有一个表的确切名称为“statement workers”吗?请记住,如果不在表名后列出列,则需要提供参数列表中的每个字段,并且该列表应与字段在表中的显示顺序完全一致。表名为[statement workers],仍然会出现相同的错误。这很奇怪,您能显示表中的所有字段名称及其类型吗?选项卡编号、用户名-短文本、密码-短文本、全名-短文本、电话号码、职务名称-短文本、雇用日期-日期/时间、DOB-日期/时间,支付货币。我已经试过了,但是仍然得到相同的错误。是相同的语法错误还是现在不同了?您确定有一个表的确切名称为“statement workers”吗?请记住,如果不在表名后列出列,则需要提供参数列表中的每个字段,并且该列表应与字段在表中的显示顺序完全一致。表名为[statement workers],仍然会出现相同的错误。这很奇怪,您能显示表中的所有字段名称及其类型吗?选项卡编号、用户名-短文本、密码-短文本、全名-短文本、电话号码、职务名称-短文本、雇用日期-日期/时间、DOB-日期/时间,支付货币。我已经这样做了,但我仍然得到相同的错误,你可能还必须拼写出字段名。请参见编辑。它给出了相同的错误。我已经在拼写上进行了计数器检查。我已经做了,但是我仍然得到相同的错误。您可能还需要拼写字段名称。请参阅edit.It’s给出的错误与我在拼写上计数器检查的错误相同您的表的实际名称是什么?它是“报表工作人员”还是仅仅是“工作人员”?它的报表工作人员表的实际名称是什么?它是“报表工作人员”还是仅仅是“工作人员”?它的报表工作人员