使用自动增量主键访问数据库和C#问题

时间:2014-09-11 03:42:34

标签: c# ms-access-2007

我有一个名字,姓氏,电子邮件,主管的表格。然后,我将代码置于按钮设置为此

之后
  private void agentInsertButton_Click(object sender, EventArgs e)
    {
        try
        {
            ad.InsertCommand = new OleDbCommand("insert into Agents values ([FirstName],[LastName],[Email],[Supervisor])", con);


            ad.InsertCommand.Parameters.Add("@FirstName", OleDbType.VarChar).Value = agentNametextBox1.Text.ToString();
            ad.InsertCommand.Parameters.Add("@LastName", OleDbType.VarChar).Value = agentLastNametextBox4.Text.ToString();
            ad.InsertCommand.Parameters.Add("@Email", OleDbType.VarChar).Value = agentEmailtextBox3.Text.ToString();
            ad.InsertCommand.Parameters.Add("@Supervisor", OleDbType.VarChar).Value = agentSupervisortextBox2.Text.ToString();

            con.Open();
            ad.InsertCommand.ExecuteNonQuery();
            con.Close();
        }
        catch (Exception ex) {
            MessageBox.Show(ex.Message);

        };

我收到的查询值错误数和目标字段不一样。我确信这是我如何让数据库发送变量和导致问题的AgentID。我是新手,但这是我的工作想要使用的。期待一个坚实的答案。

我只是使用名为Agents

的简单访问数据库

字段

AgentID - auto number
FirstName - text
LastName - text 
Email - text
Supervisor - text 

3 个答案:

答案 0 :(得分:3)

当你写一个INSERT语句时,它必须是这样的:

INSERT INTO TableName VALUES (ValueList)

在这种情况下,您必须为每个列及其添加到表中的顺序提供值,或者像这样:

INSERT INTO TableName (ColumnList) VALUES (ValueList)

在这种情况下,您可以按任意顺序指定列的子集。你们两个都做不到。你做到了这一点:

INSERT INTO TableName VALUES (ColumnList)

这是毫无意义的。你的SQL必须是这样的:

insert into Agents ([FirstName],[LastName],[Email],[Supervisor]) values (@FirstName,@LastName,@Email,@Supervisor)

请注意,这些值现在与您添加到命令的参数相匹配。

答案 1 :(得分:0)

像这样更改您的查询

ad.InsertCommand = new OleDbCommand("insert into Agents values (@FirstName,@LastName,@Email,@Supervisor)", con);

    ad.InsertCommand = new OleDbCommand("insert into Agents (FirstName,LastName,Email,Supervisor) values (@FirstName,@LastName,@Email,@Supervisor)", con);

答案 2 :(得分:0)

OleDb是基于索引的,并没有使用命名参数。

更改如下:

ad.InsertCommand = new OleDbCommand("insert into Agents (FirstName, LastName, Email, Supervisor) values (?, ?, ?, ?)", con);

ad.InsertCommand.Parameters.AddWithValue("?", agentNametextBox1.Text);
ad.InsertCommand.Parameters.AddWithValue("?", agentLastNametextBox4.Text);
ad.InsertCommand.Parameters.AddWithValue("?", agentEmailtextBox3.Text);
ad.InsertCommand.Parameters.AddWithValue("?", agentSupervisortextBox2.Text);