我正在对我的数据库进行简单的INSERT
查询。列id
具有自动生成的ID,我需要它用于其他查询。我读过我可以在输出方向上使用参数获取生成的id,所以我写了这段代码:
string id;
queryString = "INSERT INTO tr_text (form, item, enabled, programID) VALUES (@myForm, @myItem, 1, @myProgramID)";
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(queryString, connection);
connection.Open();
command.CommandText = queryString;
command.Parameters.Add("@myForm", SqlDbType.NVarChar, 50).Value = form;
command.Parameters.Add("@myItem", SqlDbType.NVarChar, 50).Value = item;
command.Parameters.Add("@myProgramID", SqlDbType.Int).Value = 1;
SqlParameter param = new SqlParameter("@id", SqlDbType.Int, 0, "id");
param.Direction = ParameterDirection.Output;
command.Parameters.Add(param);
command.ExecuteNonQuery();
id = command.Parameters["@id"].Value.ToString();
}
我的查询正确执行(我的数据库中有正确的新记录),但我的id
变量仍为空!我该如何使代码工作?
答案 0 :(得分:3)
请更改您的查询;
INSERT INTO tr_text (form, item, enabled, programID)
OUTPUT INSERTED.ID
VALUES (@myForm, @myItem, 1, @myProgramID)
并使用ExecuteScalar()代替ExecuteNonQuery();
Int32 id= (Int32) command.ExecuteScalar();
答案 1 :(得分:1)
更改您的查询,因为您没有将@id设置为任何值
INSERT INTO tr_text (form, item, enabled, programID) VALUES (@myForm, @myItem, 1, @myProgramID)
set @id = SCOPE_IDENTITY();