无法从查询中的SqlParameter获取输出参数

时间:2013-06-13 08:24:26

标签: c# asp.net sql-server sqlparameter

我正在对我的数据库进行简单的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变量仍为空!我该如何使代码工作?

2 个答案:

答案 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();