C# 无法将字符串作为参数传递给ASP.NET MVC中的存储过程

C# 无法将字符串作为参数传递给ASP.NET MVC中的存储过程,c#,sql-server,asp.net-mvc,C#,Sql Server,Asp.net Mvc,在C ASP.NET MVC中,我遇到了一个将字符串值作为参数传递给存储过程的问题。非常感谢您的帮助 我尝试了各种设置参数的选项,比如 cmd.Parameters.AddWithValue("@P_ORG", pOrg); cmd.Parameters.Add(pOrg); 代码段: using (SqlConnection con = new SqlConnection(cs)) { con.Open(); SqlParameter param = new SqlParame

在C ASP.NET MVC中,我遇到了一个将字符串值作为参数传递给存储过程的问题。非常感谢您的帮助

我尝试了各种设置参数的选项,比如

cmd.Parameters.AddWithValue("@P_ORG", pOrg);
cmd.Parameters.Add(pOrg);
代码段:

using (SqlConnection con = new SqlConnection(cs))
{
   con.Open();

   SqlParameter param = new SqlParameter()
   {
      ParameterName = "@P_ORG",
      Value = pOrg
   };

   SqlCommand cmd = new SqlCommand("getCCM", con);
   cmd.CommandType = CommandType.StoredProcedure;
   cmd.Parameters.Add(param);

   using (SqlDataReader rdr = cmd.ExecuteReader())
   {  
      //do something 
   }
}  

正如Pankaj Kapare在评论中所说,您必须添加

SqlDbType = SqlDbType.VarChar

我希望下面的示例能够解决您的问题

command.Parameters.AddWithValue("@parameterID", parameter1);
官方定义:

AddWithValue替换接受字符串和对象的SqlParameterCollection.Add方法。由于SqlParameterCollection可能存在歧义,因此不推荐使用采用字符串和对象的Add重载。采用字符串和SqlDbType枚举值的Add重载,其中使用字符串传递整数可以解释为参数值或相应的SqlDbType值。通过指定参数的名称和值来添加参数时,请使用AddWithValue

资料来源:

与解决方案类似的问题链接:

请告诉我您的想法或反馈

谢谢


Karthik MCP,MCSA

您在哪里分配pOrg的值?您可以编辑此文件并显示与您的问题相关的所有代码吗?还有什么不起作用?异常或编译错误?@MaLiN2223方法签名不会决定其大小写。。这里有足够的代码来确定它们的目的是什么..除了缺少的pOrg值和它被分配的位置。。看到实际的存储过程会很好,虽然可能会添加参数类型以及名称和值,如SqlDbType=SqlDbType.VarChar将有所帮助。pOrg值来自视图,我正确地打印了它。我还尝试将数据类型提供为VarChar。从CC_ORG中选择不同的名称,其中P_ORG=@P_ORG刚刚尝试了这个,但没有成功:SqlParameter param=new SqlParameter{SqlDbType=SqlDbType.VarChar,ParameterName=@PERFORMING_ORG,Value=performingOrg};仅供参考,当我在应用程序中硬编码查询而不是调用过程时,它可以正常工作。但我不想硬编码查询。您得到的异常是什么?不幸的是,没有异常。我确信它正在执行过程,但看起来参数值没有通过。我不知道如何检查参数传递到存储过程后。在调用存储过程之前,在我的应用程序中,该值是正确的。SSMS附带了一个相当不错的探查器。我以前也用过它来调试类似的事情。只需搜索SSMS SQL Server profiler以了解如何使用它。还有,本地pOrg变量的数据类型是什么le.你是否特别确定你投的是正确的。嗨,Kathik,我在我的帖子中提到,最初是用AddWithValue开始的。它不起作用。我使用的是MVC framework 4.5.2,下面是我的操作定义,如果这有助于:public JsonResult getCCMstring performingor仅供参考,当我硬编码查询而不是调用过程时在我的应用程序中,它运行良好。但我不想硬编码查询。