我在DB中插入一个记录,我使用内联查询,我必须获得生成的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();我正在犯错误:
必须声明标量变量"@ID“。 必须声明标量变量"@username“。
我也试过使用(int)myCommand.ExecuteScalar(),但没有成功。
在这种情况下,如何获得生成的ID?
发布于 2015-05-21 09:05:07
根据我从您的问题中可以看出的,您已经声明了一个名为query的变量,并在其中编写了您的查询。而且,您的参数声明似乎是正确的。
现在问题可能在这一行中:
myCommand.CommandText = _query;变量是query,这里使用的是_query。因此,这可能就是为什么没有为该特定查询添加参数,从而导致错误。应该是这样的:
myCommand.CommandText = query;希望这一切都过去了。
发布于 2015-05-21 09:10:43
而不是选择使用Set @Id=Scope_Identity()
https://stackoverflow.com/questions/30368698
复制相似问题