【发布时间】:2009-09-29 08:01:06
【问题描述】:
我有一个 SQL Server 2008 数据库,并希望通过存储过程从 C#-WCF 访问表。 proc 是一个简单的 SELECT 查询,它获取给定 id 的行并将结果填充到一些输出参数中:
PROCEDURE [dbo].[get_stammInfo]
-- Add the parameters for the stored procedure here
@id int,
@strassenSchluessel int OUTPUT,
@hausNummer int OUTPUT,
@zusatz nvarchar(1) OUTPUT,
...
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
SELECT @strassenSchluessel = strassenSchluessel,
@hausNummer = hausNummer,
@zusatz = zusatz,
...
FROM gebaeudeStamm
WHERE id = @id
END
在我的 C#-Code 中,我创建了一个命令对象,连接数据库并将参数添加到命令对象。
当我调用 ExecuteNonQuery 时,它会抛出以下异常
{"Die Prozedur oder Funktion 'getstammInfo' erwartet den '@id'-Parameter, der nicht bereitgestellt wurde."} 翻译为“过程或函数 'getstammInfo' 期望 ' @id'-参数,未提供”
问题听起来很清楚,但实际上我提供了 id 参数。我可以在VS2008的直接窗口中查询:
_command.Parameters[0]
{@id}
基础{System.Data.Common.DbParameter}:{@id}
比较信息:无
数据库类型:Int32
方向:输入
IsNullable: 假
LocaleId:0
偏移量:0
参数名称:“@id”
精度:0
比例:0
大小:0
源列:“”
SourceColumnNullMapping: 假
SourceVersion:当前
SqlDbType:整数
SqlValue:{7112}
类型名称:“”
UdtTypeName: ""
值:7112
XmlSchemaCollectionDatabase: ""
XmlSchemaCollectionName: ""
XmlSchemaCollectionOwningSchema: ""
如您所见, id 参数存在于 Parameterscollection 中,并且它与存储过程所期望的参数具有相同的类型。我不知道,可能出了什么问题,但似乎错误消息是错误的,并且发生了其他一些错误......
这里有人可以提示我什么我应该查找错误吗?
【问题讨论】:
-
将 C# 代码发布到您调用 SP 的位置。
-
能否贴出将参数添加到命令对象的代码...
-
我注意到异常中 SP 被称为 getstammInfo 但您发布的名称是 get_stammInfo,您确定您调用的 SP 正确吗?
-
@dale:我从异常消息中删除了缺少的下划线,因为它被解释为斜体标记。在调用中,名称中包含下划线。
-
哦,天哪……我看了一千遍有问题的代码块……直到现在我才意识到,Command-Object 被声明为 CommandType.Text,而不是 CommandType.StoredProcedure(该死复制'n'粘贴)。这就是问题所在。
标签: c# sql-server-2008 stored-procedures