【问题标题】:Adding integer parameter to stored procedure in ASP.NET C#在 ASP.NET C# 中向存储过程添加整数参数
【发布时间】:2018-09-26 03:23:51
【问题描述】:

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

【问题讨论】:

  • 为什么以“Id”结尾的参数是varchar?
  • 您桌子上的id 列似乎是varchar
  • 看起来c#变量id是一个字符串。

标签: c# sql asp.net parameter-passing


【解决方案1】:

如果您知道得更多,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()中的链接了解更多背景信息。

【讨论】:

    【解决方案2】:

    试试这个……

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

    【讨论】:

      猜你喜欢
      • 2015-11-20
      • 1970-01-01
      • 2012-10-08
      • 2021-05-03
      • 2019-03-17
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多