无法获取SQL命令来识别添加的params

时间:2010-04-25 19:50:03

标签: c# sql ado.net

我暂时没有使用基本的SQL命令,我试图将一个参数传递给一个sproc并运行它。但是,当我运行代码时,我收到“未提供”错误。

代码:

SqlConnection conn1 = new SqlConnection(DAL.getConnectionStr());
SqlCommand cmd1 = new SqlCommand("SProc_Item_GetByID", conn1);
cmd1.Parameters.Add(new SqlParameter("@ID", itemId));
conn1.Open();
cmd1.ExecuteNonQuery();

我不确定为什么会失败。对基本问题道歉,但我迷路了!

提前致谢。

2 个答案:

答案 0 :(得分:3)

您应该将CommandType设置为StoredProcedure,设置连接并使用Parameters.AddWithValue("@ID", itemID)

cmd1.CommandType = CommandType.StoredProcedure;
cmd1.Connection = conn1;
cmd1.Parameters.AddWithValue("@ID",itemID);
conn1.Open();
cmd1.ExecuteNonQuery();

如果您想使用Parameters.Add()(已过时),请按以下步骤操作(您也需要传递类型)

cmd1.Parameters.Add("@ID", SqlDbType.Int); //string maybe, I don't know
cmd1.Parameters["@ID"].Value = itemID;

这应该有效:

SqlConnection conn1 = new SqlConnection(DAL.getConnectionStr());
SqlCommand cmd1 = new SqlCommand("SProc_Item_GetByID", conn1);
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.Parameters.AddWithValue("@ID", itemId);
conn1.Open();
cmd1.ExecuteNonQuery();

答案 1 :(得分:2)

为了让您的代码更好,请将SqlConnectionSqlCommand放入using语句中,以便在使用块结束时自动释放它们:

using(SqlConnection conn1 = new SqlConnection(DAL.getConnectionStr()))
{
   using(SqlCommand cmd1 = new SqlCommand("SProc_Item_GetByID", conn1))
   {
        cmd1.CommandType = CommandType.StoredProcedure;
        cmd1.Parameters.AddWithValue("@ID", itemId);

        conn1.Open();

        cmd1.ExecuteNonQuery();

        conn.Close();
   }
}