我正在尝试与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?到目前为止,我被迫进行插入,然后选择以获取生成的密钥 .
我感谢任何建议 .