插入记录时必须声明标量变量@ID
Must declare scalar variaable @ID when inserting record
我在数据库中插入一条记录,我正在使用内联查询,我必须获取生成的 ID,我就是这样做的
var query = "INSERT INTO [Users] ([Username],[Password]) VALUES(@username,@pwd) SELECT @ID = SCOPE_IDENTITY()";
OleDbParameter[] queryparam = new OleDbParameter[3];
queryparam[0] = new OleDbParameter("@username", OleDbType.VarChar);
queryparam[0].Value = "username";
queryparam[1] = new OleDbParameter("@pwd", OleDbType.VarChar);
queryparam[1].Value = "123456";
queryparam[2] = new OleDbParameter("@ID", OleDbType.Integer);
queryparam[2].Direction = ParameterDirection.Output;
OleDbCommand myCommand = new OleDbCommand();
myCommand.Connection = DBConnectionHelper.getConnection();
myCommand.CommandText = query;
myCommand.Parameters.AddRange(queryparam);
adapter.InsertCommand = myCommand;
myCommand.ExecuteNonQuery();
我遇到错误:
Must declare the scalar variable "@ID".
Must declare the scalar variable "@username".
我也试过使用 (int)myCommand.ExecuteScalar()
但没有成功。
在这种情况下如何获得生成的 ID?
根据我对你的问题的了解,你已经声明了一个名为 query
的变量,并在其中编写了你的查询。另外,您的参数声明似乎是正确的。
现在问题可能出在这一行:
myCommand.CommandText = _query;
变量是query
,这里你使用的是_query
。所以这可能就是为什么没有为该特定查询添加参数并因此出现错误的原因。应该是这样的:
myCommand.CommandText = query;
希望一切顺利。
而不是 Select 使用 Set @Id=Scope_Identity()
The OLE DB .NET Provider does not support named parameters for passing parameters to an SQL statement or a stored procedure called by an OleDbCommand
when CommandType
is set to Text
1. In this case, the question mark (?) placeholder must be used. For example:
SELECT * FROM Customers WHERE CustomerID = ?
因此,对于您的代码,您的查询应该是:
INSERT INTO [Users] ([Username],[Password]) VALUES(?,?) SELECT ? = SCOPE_IDENTITY()
1这是默认设置,您的代码使用的也是默认设置。
我在数据库中插入一条记录,我正在使用内联查询,我必须获取生成的 ID,我就是这样做的
var query = "INSERT INTO [Users] ([Username],[Password]) VALUES(@username,@pwd) SELECT @ID = SCOPE_IDENTITY()";
OleDbParameter[] queryparam = new OleDbParameter[3];
queryparam[0] = new OleDbParameter("@username", OleDbType.VarChar);
queryparam[0].Value = "username";
queryparam[1] = new OleDbParameter("@pwd", OleDbType.VarChar);
queryparam[1].Value = "123456";
queryparam[2] = new OleDbParameter("@ID", OleDbType.Integer);
queryparam[2].Direction = ParameterDirection.Output;
OleDbCommand myCommand = new OleDbCommand();
myCommand.Connection = DBConnectionHelper.getConnection();
myCommand.CommandText = query;
myCommand.Parameters.AddRange(queryparam);
adapter.InsertCommand = myCommand;
myCommand.ExecuteNonQuery();
我遇到错误:
Must declare the scalar variable "@ID".
Must declare the scalar variable "@username".
我也试过使用 (int)myCommand.ExecuteScalar()
但没有成功。
在这种情况下如何获得生成的 ID?
根据我对你的问题的了解,你已经声明了一个名为 query
的变量,并在其中编写了你的查询。另外,您的参数声明似乎是正确的。
现在问题可能出在这一行:
myCommand.CommandText = _query;
变量是query
,这里你使用的是_query
。所以这可能就是为什么没有为该特定查询添加参数并因此出现错误的原因。应该是这样的:
myCommand.CommandText = query;
希望一切顺利。
而不是 Select 使用 Set @Id=Scope_Identity()
The OLE DB .NET Provider does not support named parameters for passing parameters to an SQL statement or a stored procedure called by an
OleDbCommand
whenCommandType
is set toText
1. In this case, the question mark (?) placeholder must be used. For example:
SELECT * FROM Customers WHERE CustomerID = ?
因此,对于您的代码,您的查询应该是:
INSERT INTO [Users] ([Username],[Password]) VALUES(?,?) SELECT ? = SCOPE_IDENTITY()
1这是默认设置,您的代码使用的也是默认设置。