在 ASP.NET C# 中向存储过程添加整数参数



尝试将整数参数@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);

如果你知道得更好,不要使用 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);
        }
    }
}

阅读不要使用 AddWithValue(( 中的链接以获取更多背景信息。

试试这个...

 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);

最新更新