【发布时间】:2015-01-30 01:20:20
【问题描述】:
我在 Visual Studio 2010 中使用 C# 并连接到 SQL Server 2008 数据库。我正在调用一个存储过程并将其传递给一个参数。我收到以下错误消息。
我检查了正在传递的参数,名称和值是否正确并且连接已打开,存储过程名称也正确。如果我为参数设置默认值,它会返回相应的行。在错误消息下方,我放置了正在执行的代码。传递给Parameters.AddWithValue 的值为ParmName = @DetailCategoryID、ParmValue = 2。当我使用 Visual Web Developer 2008 Express Edition 执行完全相同的代码时,它可以完美运行。
System.Data.Odbc.OdbcException (0x80131937): 错误 [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]过程或函数 “spGET_Detail”需要参数“@DetailCategoryID”,而这不是 提供。\r\n 在 System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode 重新编码)\r\n 在 System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior 行为,字符串方法,布尔需要读取器,对象[] 方法参数, SQL_API odbcApiMethod)\r\n 在 System.Data.Odbc.OdbcCommand.ExecuteReaderObject(CommandBehavior 行为、字符串方法、布尔需要读取器)\r\n at System.Data.Odbc.OdbcCommand.ExecuteReader(CommandBehavior 行为)\r\n 在 System.Data.Odbc.OdbcCommand.ExecuteReader()\r\n
在 DataAccess.OpenReader() 中 C:\Development\DetailRetrieval\DetailRetrieval\Classes\DataAccess.cs:line 第1252章
代码
this.DB_Comm.Parameters.AddWithValue(ParmName, ParmValue);
存储过程:
ALTER PROCEDURE spGET_Detail
@DetailCategoryID smallint
AS
BEGIN
SET NOCOUNT ON;
SELECT F.* FROM dbo.tbDetail_MSTR AS F
WHERE (F.DetailCategoryID = @DetailCategoryID)
ORDER BY [F].[Description]
END
GO
如果有人能提供任何帮助,我将不胜感激。
谢谢
【问题讨论】:
-
所以
ParmName = @DetailID和parameter '@DetailCategoryID'是预期的,但你是说名字没问题? -
您能否包括您的调用代码而不仅仅是 sp 定义?那会很有帮助。
-
嗨 BenR,这里是调用代码 -> DA.StoredProcedure = _StoredProc; DA.ParametersClear(); // 加载参数 foreach (string o in _Parms) { DA.ParametersAdd(o, _ParmVals[p]); p++; } if (DA.OpenReader()) public bool ParametersAdd(string IN_ParmName, object IN_ParmValue) { bool Ret = true;试试 { this.DB_Comm.Parameters.AddWithValue(IN_ParmName, IN_ParmValue); } catch(Exception ex) { this.Except = ex.ToString();雷特=假; } 返回 }
标签: c# .net sql-server