在使用带有 OleDb 连接的 MS Access 的 Insert Into 命令期间,如何 return 主键值?
How can one return the primary key value during an Insert Into command using MS Access with an OleDb connection?
我可以从桌面应用程序(C#、WinForms)向我的 MS Access table ("Table1"
) 中插入一行新数据,但我不知道如何 return 新添加行的主键 ("UniqueID"
) 的值。我正在使用 OleDbConnection 来执行我的所有查询。我已经尝试使用如下所示的 OUTPUT 子句,以及 SCOPE_IDENTITY() 到 return 值,但我只得到异常:"Syntax error in INSERT INTO statement."
我已经看到很多关于如何使用 SQL 服务器执行此操作的示例,但是是否可以 return 使用 Access 和 OleDbConneciton 的主键值?
int PrimaryKey;
using (OleDbConnection Connection = new OleDbConnection(CONNECTION_STRING))
{
Connection.Open();
OleDbCommand Command = new OleDbCommand();
Command.Connection = Connection;
Command.CommandText = String.Format(
"INSERT INTO Table1 (JobNumber, ItemNumber) " +
"OUTPUT INSERTED.UniqueID " +
"VALUES (@jobnumber, @itemnumber)");
Command.Parameters.AddRange(new OleDbParameter[]
{
new OleDbParameter("@jobnumber", JobNumber),
new OleDbParameter("@itemnumber", ItemNumber)
});
PrimaryKey = Convert.ToInt32(Command.ExecuteScalar());
}
OUTPUT INSERTED 不是 Jet Sql(Microsoft Access 的 sql 引擎)的有效语法,而且 SCOPE_IDENTITY() 也不被理解。此外,Jet 不支持批处理语句。所以你需要向引擎发送两个不同的命令。
int PrimaryKey;
using (OleDbConnection Connection = new OleDbConnection(CONNECTION_STRING))
{
Connection.Open();
OleDbCommand Command = new OleDbCommand();
Command.Connection = Connection;
Command.CommandText = @"INSERT INTO Table1
(JobNumber, ItemNumber)
VALUES (@jobnumber, @itemnumber)";
Command.Parameters.AddRange(new OleDbParameter[]
{
new OleDbParameter("@jobnumber", JobNumber),
new OleDbParameter("@itemnumber", ItemNumber)
});
Command.ExecuteNonQuery();
// Send the next command
Command.Parameters.Clear();
Command.CommandText = "SELECT @@IDENTITY";
PrimaryKey = Convert.ToInt32(Command.ExecuteScalar());
}
我可以从桌面应用程序(C#、WinForms)向我的 MS Access table ("Table1"
) 中插入一行新数据,但我不知道如何 return 新添加行的主键 ("UniqueID"
) 的值。我正在使用 OleDbConnection 来执行我的所有查询。我已经尝试使用如下所示的 OUTPUT 子句,以及 SCOPE_IDENTITY() 到 return 值,但我只得到异常:"Syntax error in INSERT INTO statement."
我已经看到很多关于如何使用 SQL 服务器执行此操作的示例,但是是否可以 return 使用 Access 和 OleDbConneciton 的主键值?
int PrimaryKey;
using (OleDbConnection Connection = new OleDbConnection(CONNECTION_STRING))
{
Connection.Open();
OleDbCommand Command = new OleDbCommand();
Command.Connection = Connection;
Command.CommandText = String.Format(
"INSERT INTO Table1 (JobNumber, ItemNumber) " +
"OUTPUT INSERTED.UniqueID " +
"VALUES (@jobnumber, @itemnumber)");
Command.Parameters.AddRange(new OleDbParameter[]
{
new OleDbParameter("@jobnumber", JobNumber),
new OleDbParameter("@itemnumber", ItemNumber)
});
PrimaryKey = Convert.ToInt32(Command.ExecuteScalar());
}
OUTPUT INSERTED 不是 Jet Sql(Microsoft Access 的 sql 引擎)的有效语法,而且 SCOPE_IDENTITY() 也不被理解。此外,Jet 不支持批处理语句。所以你需要向引擎发送两个不同的命令。
int PrimaryKey;
using (OleDbConnection Connection = new OleDbConnection(CONNECTION_STRING))
{
Connection.Open();
OleDbCommand Command = new OleDbCommand();
Command.Connection = Connection;
Command.CommandText = @"INSERT INTO Table1
(JobNumber, ItemNumber)
VALUES (@jobnumber, @itemnumber)";
Command.Parameters.AddRange(new OleDbParameter[]
{
new OleDbParameter("@jobnumber", JobNumber),
new OleDbParameter("@itemnumber", ItemNumber)
});
Command.ExecuteNonQuery();
// Send the next command
Command.Parameters.Clear();
Command.CommandText = "SELECT @@IDENTITY";
PrimaryKey = Convert.ToInt32(Command.ExecuteScalar());
}