Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.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
Asp.net INSERT INTO语句中的语法错误_Asp.net_Vb.net_Ms Access - Fatal编程技术网

Asp.net INSERT INTO语句中的语法错误

Asp.net INSERT INTO语句中的语法错误,asp.net,vb.net,ms-access,Asp.net,Vb.net,Ms Access,我想插入新值以访问我正在使用的表代码 Public cmd As New OleDbCommand Public CMDB As New OleDbCommandBuilder Dim da As OleDb.OleDbDataAdapter Dim con As New OleDb.OleDbConnection Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles B

我想插入新值以访问我正在使用的表代码

Public cmd As New OleDbCommand
Public CMDB As New OleDbCommandBuilder
Dim da As OleDb.OleDbDataAdapter
Dim con As New OleDb.OleDbConnection

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

    con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|learn_english.mdb"
    con.Open()
    cmd = New OleDbCommand("insert into quiz (question, option1, option2, option3, option4, answer, level) values(@question, @op1, @op2, @op3, @op4, @answer ,@level)", con)
    cmd.Parameters.AddWithValue("@question", TextBox1.Text)
    cmd.Parameters.AddWithValue("@op1", TextBox2.Text)
    cmd.Parameters.AddWithValue("@op2", TextBox3.Text)
    cmd.Parameters.AddWithValue("@op3", TextBox4.Text)
    cmd.Parameters.AddWithValue("@op4", TextBox5.Text)
    cmd.Parameters.AddWithValue("@answer", TextBox6.Text)
    cmd.Parameters.AddWithValue("@level",DropDownList1.SelectedValue)

    cmd.ExecuteNonQuery()
    con.Close()
End Sub

但是我得到了错误“INSERT INTO语句中的语法错误”

OleDbCommand不支持命名参数。您必须将
@PARAM
替换为
。(请参见MSDN中的。)

OLE DB.NET提供程序不支持用于传递的命名参数 由调用的SQL语句或存储过程的参数 CommandType设置为Text时的OleDbCommand。在这种情况下 必须使用问号(?)占位符


我认为这段代码应该可以做到这一点

level是一个保留字,请按如下方式转义:
“…[level])值(…”
顶部的所有DB对象都应该一次性使用并处理,而不是为reusethx@Proputinix全局声明。为了指出这一点,我已经更新了我的answerDuplicate。实际上,您可以使用命名参数,但OleDB只将其视为位置占位符,因此您必须按相同的顺序添加或添加WithValue。这可能会导致错误I如果你按一个顺序定义它们,然后添加另一个。奇怪的是,很久没有使用OleDb。奇怪的是,MSDN为什么说这是不可能的?你有任何资源来支持@PUROTIX吗?只是因为我一直都这么做。我倾向于使用“@p1,@p2…”因此,我甚至不想将它们用作实际命名的参数。这些数字有助于明确您使用的变量。
cmd = New OleDbCommand("insert into quiz (question, option1, option2, option3, option4, answer, [level]) values(?, ?, ?, ?, ?, ? ,?)", con)
cmd.Parameters.Add(TextBox1.Text)
cmd.Parameters.Add(TextBox2.Text)
cmd.Parameters.Add(TextBox3.Text)
cmd.Parameters.Add(TextBox4.Text)
cmd.Parameters.Add(TextBox5.Text)
cmd.Parameters.Add(TextBox6.Text)
cmd.Parameters.Add(DropDownList1.SelectedValue)