我有一个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}二
base {System.Data.Common.DbParameter}:{@ id}
CompareInfo:无
DbType:Int32
方向:输入
IsNullable:false
LocaleId:0
偏移:0
ParameterName:“@ id”
精度:0
比例:0
尺寸:0
SourceColumn:“”
SourceColumnNullMapping:false
SourceVersion:当前
SqlDbType:Int
SqlValue:{7112}
TypeName:“”
UdtTypeName:“”
价值:7112
XmlSchemaCollectionDatabase:“”
XmlSchemaCollectionName:“”
XmlSchemaCollectionOwningSchema:“”
正如您所看到的,id参数存在于Parameterscollection中,它具有与参数相同的类型,存储的proc期望。我不知道,可能是什么错误,但似乎错误消息是错误的,并且发生了一些其他错误......
这里的任何人都可以提示我 我应该找到错误吗?
答案 0 :(得分:0)
请显示您用来调用该程序的代码。
您的问题是您在参数名称中添加了@
符号。当您向SqlCommand
添加参数时,请不要使用@
符号。