插入记录时必须声明标量变量@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()

来自OleDbCommand.Parameters

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 Text1. 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这是默认设置,您的代码使用的也是默认设置。