给出所有参数时,没有给出一个或多个必需参数的值

时间:2017-05-20 18:12:34

标签: c# sql oledb oledbconnection oledbcommand

我得到的错误是 类型' System.Data.OleDb.OleDbException'的未处理异常发生在System.Data.dll

附加信息:没有给出一个或多个必需参数的值。

但是当所有参数都出现在当前代码之后:

private OleDbDataReader dbReader;// Data Reader object
    string sConnection = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=ICTSchool.accdb";
    string sql;
    OleDbConnection dbConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=ICTSchool.accdb");
    OleDbCommand dbCommand;

public class ComboboxItem
    {
        public string Text { get; set; }
        public object Value { get; set; }

        public override string ToString()
        {
            return Text;
        }
    } 

private void bAdd_Click(object sender, EventArgs e)
    {
        {
            dbConn = new OleDbConnection(sConnection);

            dbConn.ConnectionString = sConnection;


            dbConn.Open();
            string code = (cBQualification.SelectedItem as ComboboxItem).Value.ToString();
            string sqlinsert = "INSERT INTO Student VALUES (" + tBStudentNum.Text + "," + tBStudentName.Text+","+ tBCellNo.Text+","+ code + ")";
            Console.WriteLine("Test 'sqlinsert' "+ sqlinsert);

            dbCommand = new OleDbCommand(sqlinsert, dbConn);

            dbCommand.ExecuteNonQuery();
        }
    }

3 个答案:

答案 0 :(得分:0)

以下是有关如何在MS Access中插入值的文章的一部分。 要向表中添加一条记录,必须使用字段列表来定义将数据放入哪些字段,然后必须在值列表中提供数据本身。要定义值列表,请使用VALUES子句。

例如,以下语句将值“1”,“Kelly”和“Jill”分别插入CustomerID,Last Name和First Name字段。

  

INSERT INTO tblCustomers(CustomerID,[姓氏],[名字])   价值观(1,'凯利','吉尔')

您可以省略字段列表,但前提是您提供记录中可包含的所有值。

  

INSERT INTO tblCustomers VALUES(1,Kelly,'Jill','555-1040',   'someone@microsoft.com')

来源MSDN How to: Insert, Update, and Delete Records From a Table Using Access SQL

答案 1 :(得分:0)

一些观察结果; 1)您没有在SQL中指定参数,因此我们只能假设Student表中有四个字段。 2)您没有使用命名参数 - 这通常是不好的做法。 3)您正在使用连接值和SQL - 这将使您容易受到SQL注入攻击 4)任何一个文本框都可能包含逗号或其他导致SQL错误的SQL格式化字符。

答案 2 :(得分:0)

我看到的问题可能是因为SQL语句格式不正确。字符串值(NVARCHAR,VARCHAR)应该用单引号括起来,我相信这不是你现在用以下语句做的事情

string sqlinsert = "INSERT INTO Student VALUES (" + tBStudentNum.Text + "," + tBStudentName.Text+","+ tBCellNo.Text+","+ code + ")";

尝试将SQL语句更改为

string sqlinsert = $"INSERT INTO Student VALUES ({tBStudentNum.Text}, '{tBStudentName.Text}', {tBCellNo.Text}, '{code}')";

我在上述情况下假设tBStudentNum.Text和tBCellNo.Text是数值。如果没有,您可以进行适当的更改以将值放在单引号内。

如果您使用的是较低版本的.net / C#,请将$表示替换为string.format函数。