找不到存储过程

时间:2014-09-22 17:10:42

标签: c# asp.net sql-server visual-studio-2012 stored-procedures

我的C#代码中有很多存储过程调用,但只有这一个会一直失败。我正在运行VS 2012和SQL Server 2008 R2。我的连接字符串对于我的所有存储过程都是相同的,并且我对所有存储过程具有相同的权限。

我收到此错误

  

无法找到存储过程'StP_Map_Preload @ bldg,@ linePos,@ startD,@ lineNo,@ Prmm,@ apPos,@ passionID'。
  System.Exception {System.Data.SqlClient.SqlException}

在这一行:

SqlDataReader dr = cmd.ExecuteReader();:

我尝试使用相同的代码创建一个新的存储过程,设置权限,但也失败了。

public ArrayList DetailPreload(string bldg, string linePos, DateTime startD, string lineNo, string Pgrm, int apPos, string sessionID)
{
    string strSQL = "StP_Map_Preload @bldg, @linePos, @startD, @lineNo, @Pgrm, @apPos, @sessionID";

    ArrayList list = new ArrayList();

    using (SqlConnection conStr = new SqlConnection(connM))
    {
        using (SqlCommand cmd = new SqlCommand())
        {
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.Clear();

            cmd.Parameters.AddWithValue("@bldg", bldg);
            cmd.Parameters.AddWithValue("@linePos", linePos);
            cmd.Parameters.AddWithValue("@startD", startD);
            cmd.Parameters.AddWithValue("@lineNo", lineNo);
            cmd.Parameters.AddWithValue("@Pgrm", Pgrm);
            cmd.Parameters.AddWithValue("@apPos", apPos);
            cmd.Parameters.AddWithValue("@sessionID", sessionID);

            cmd.CommandText = strSQL;
            cmd.Connection = conStr;

            conStr.Open();
            SqlDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                list.Add(new
                        {
                            company = dr["Company"],
                            Pgrm = dr["Pgrm"],
                            lineNum = dr["lineNum"],
                            lineStation = dr["lineStation"],
                            jobCount = dr["Job"],
                            item = dr["Item"],
                            qty = dr["Qty"],
                            partQty = dr["partQty"],
                            invCnt = dr["invCnt"],
                            runID = dr["runID"]
                        });
            }

            conStr.Close();

            return list;
        }
    }
}

我的存储过程在SQL Server中,我可以在SQL Server中执行它

/*
StP_Map_Preload 'AA-12', '7', '09/19/2014', '', '247', 7, 'val2gxfh5ihoqy4tshzl4tp3'
*/
ALTER proc [dbo].[StP_Map_Preload] 
      @Bldg varchar(10), 
      @linePos varchar(5), 
      @startD date, 
      @LineNo varchar(5), 
      @Pgrm varchar(5), 
      @apPos int, 
      @sessionID varchar(50) 
AS 
BEGIN
    declare @sql varchar(Max), @PST varchar(20), 
            @SI1 varchar(5), @SI2 varchar(5), @SI3 varchar(5), 
            @hasAP bit, @CCLen varchar, 
            @Co varchar(5), @CCs varchar(25), @lsGrp varchar(max)...

1 个答案:

答案 0 :(得分:3)

将您的行更改为

string strSQL = "StP_Map_Preload";

无需在命名存储过程的字符串中列出参数。