我正在尝试与Access数据库 Build oledb连接以插入新记录并检索一次生成的密钥 . 代码是这样的:

private static int createUser(OleDbConnection accessConn)
    {
        try
        {
            accessConn.Open();
            //DbCommand also implements IDisposable
            using (OleDbCommand cmd = accessConn.CreateCommand())
            {
                //create command with placeholders
                cmd.CommandText =
                    "INSERT INTO EmployeeFiles " +
                    "([FirstName], [LastName], [JobTitleID], [SecurityLevel], [RowGUID])" +
                    "VALUES(@FirstName, @LastName, @JobTitleID, @SecurityLevel, @RowGUID)";

                //Set Parameters
                string FirstName = "Dick";
                string LastName = "Tracy";
                int JobTitleID = 11;
                string SecurityLevel = "1";
                string RowGUID = "{" + Guid.NewGuid() + "}";


                //add named parameters
                cmd.Parameters.AddRange(new OleDbParameter[]
                {
                    new OleDbParameter("@FirstName", FirstName),
                    new OleDbParameter("@LastName", LastName),
                    new OleDbParameter("@JobTitleID", JobTitleID),
                    new OleDbParameter("@SecurityLevel", SecurityLevel),
                    new OleDbParameter("@RowGUID", RowGUID)
                });

                int userId = 0;

                //Add @EmployeeID to the params collection and then retrieve it with Value
                cmd.Parameters.Add("@EmployeeID", OleDbType.Integer).Direction = ParameterDirection.Output;
                cmd.ExecuteNonQuery();
                userId = (int)cmd.Parameters["@EmployeeID"].Value;

                //userId = (int)cmd.ExecuteScalar();

                Console.WriteLine("user created successfully: {0}", deliveryId);
                return userId;
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: Failed creating the user.\n{0}", ex.Message);
            return 0;
        }
        finally
        {
            accessConn.Close();
        }
    }

当我运行代码时,它会抛出此错误:

System.Data.OleDb.OleDbDataAdapter internal error: invalid parameter accessor: 9 BADBINDINFO

我很确定有问题的一行是这样的:

cmd.Parameters.Add("@EmployeeID", OleDbType.Integer).Direction = ParameterDirection.Output;

我只是不知道错误在哪里 .

如果我评论那个和接下来的两行,并取消注释:

userId = (int)cmd.ExecuteScalar();

它抛出错误: Object reference not set to an instance of an object

有没有办法让这个工作与OleDbParameter?到目前为止,我被迫进行插入,然后选择以获取生成的密钥 .

我感谢任何建议 .