我的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)...
答案 0 :(得分:3)
将您的行更改为
string strSQL = "StP_Map_Preload";
无需在命名存储过程的字符串中列出参数。