尝试将整数参数@id
传递给存储过程时,出现错误da.Fill(ds)
:
其他信息:将varchar值'@id'转换为数据类型int时转换失败。
我已确保传递整数值,并且存储过程包含正确的数据类型。还有哪些其他可能性来纠正这个错误?
SqlConnection conn = new SqlConnection(cs);
conn.Open();
SqlCommand cmd1 = new SqlCommand("asp_GetTrainingDetail", conn);
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.Parameters.AddWithValue("@id", id);
SqlDataAdapter da = new SqlDataAdapter(cmd1);
DataSet ds = new DataSet();
da.Fill(ds);
答案 0 :(得分:0)
试试这个......
SqlConnection conn = new SqlConnection(cs);
conn.Open(); SqlCommand cmd1 = new
SqlCommand("asp_GetTrainingDetail", conn);
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.Parameters.AddWithValue("@id", Int.Parse(id));
SqlDataAdapter da = new SqlDataAdapter(cmd1);
DataSet ds = new DataSet();
da.Fill(ds);
答案 1 :(得分:0)
如果你知道的更好,do not use AddWithValue() ......它必须"猜测"根据您在命令中输入的内容,您在数据库中拥有的数据类型。它是错误的,会导致不必要的转换。
另外:在一次性用品周围使用using(..)
,尤其是在使用数据库访问时,即使出现异常,它也会关闭您的连接 - 不使用using
可能会让某些连接保持未关闭状态。
DataSet ds = new DataSet ();
using (var conn = new SqlConnection (cs))
{
using (var cmd1 = new SqlCommand ("asp_GetTrainingDetail", conn))
{
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.Parameters.Add("@id", System.Data.SqlDbType.BigInt).Value = id;
using (var da = new SqlDataAdapter (cmd1))
{
da.Fill (ds);
}
}
}
阅读do not use AddWithValue()中的链接,了解更多背景信息。