【问题标题】:Error With SqlCommand not accepting Parameter ArgumentsSqlCommand 不接受参数参数时出错
【发布时间】:2017-02-24 17:35:00
【问题描述】:

我正在尝试使用以下代码在我的数据库中执行存储过程:

using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["myCNN"].ConnectionString))
{
    using (var cmd = new SqlCommand("dbo.myStoredProcedure", connection))
    {
        cmd.Parameters.Add("@PatientId", SqlDbType.VarChar, 40).Value = number;
        cmd.Parameters.Add("@NickName", SqlDbType.VarChar, 20).Value = "stlukeshs";                            
        var reader = cmd.ExecuteReader();
        while(reader.Read())
        {
            //Do Stuff..
        }
        //closer reader
        reader.Close();
    }
}

但是,在执行时我收到一条错误消息:

System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理

附加信息:过程或函数“myStoredProcedure”需要参数“@PatientId”,但未提供。

很明显,您看到我正在添加参数,而number 的值是 100,而不是 null。所以我有点困惑为什么它没有得到我的参数参数。

【问题讨论】:

  • 这显然不是你真正的存储过程名称,所以大概其他的东西可能与实际代码中的不太一样……你 100% 确定这不是错字吗?
  • 我很惊讶它不会抱怨你没有打开连接。
  • 哦,是的,我错过了那行代码.. 抱歉!

标签: c# sql sql-server sqlcommand


【解决方案1】:

您需要指定CommandType,默认为Text。您必须将StoredProcedure 指定为CommandType,即

cmd.CommandType = CommandType.StoredProcedure;

所以,你的完整代码应该是:

using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["myCNN"].ConnectionString))
{
    using (var cmd = new SqlCommand("dbo.myStoredProcedure", connection))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@PatientId", SqlDbType.VarChar, 40).Value = number;
        cmd.Parameters.Add("@NickName", SqlDbType.VarChar, 20).Value = "stlukeshs";                            
        var reader = cmd.ExecuteReader();
        while(reader.Read())
        {
            //Do Stuff..
        }
        //closer reader
        reader.Close();
    }
}

【讨论】:

  • 这完全解决了我的问题。我以为那是隐含的,唉,我错了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 2013-12-19
  • 2013-03-26
  • 1970-01-01
相关资源
最近更新 更多