我写了一个存储过程:
USE [database]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [database table]
@StoreNum INT,
@CustomerID INT,
@r VARCHAR(100) OUTPUT
AS
BEGIN
Select @r = Notes FROM [Database table]
WHERE CustomerID = @CustomerID
AND StoreNumber = CAST(@StoreNum AS NVARCHAR(10))
END
当我在SQL Server管理工作室中运行此存储过程时,@ r将返回我期望的字符串。
但是使用下面的C#代码我得到错误:"无法从int转换为字符串"。
SqlParameter param4 = new SqlParameter("@StoreNum", storeaudit.StoreNumber);
SqlParameter param5 = new SqlParameter("@CustomerID", "9");
SqlParameter param7 = new SqlParameter("@r", "");
param5.SqlDbType = System.Data.SqlDbType.Int;
param7.Direction = System.Data.ParameterDirection.Output;
var NoteMan = db.Database.ExecuteSqlCommand("sp_GetNotesData @StoreNum, @CustomerID, @r", param4, param5, param7);
String managers = param7.Value.ToString();
System.Console.WriteLine(param7.Value);
非常感谢任何帮助,谢谢
UPDATE - 在参数中添加了输出和sqltype,现在字符串管理器返回""。
答案 0 :(得分:0)
你必须改变两件事:
param5值必须为int
将方向设置为param7
SqlParameter param4 = new SqlParameter("@StoreNum", storeaudit.StoreNumber);
SqlParameter param5 = new SqlParameter("@CustomerID", 9);
SqlParameter param7 = new SqlParameter("@r", "");
param7.Direction = System.Data.ParameterDirection.Output;
答案 1 :(得分:0)
您不应该获得存储过程的返回值;你应该拿结果集。
试试这个:
string str = db.Database.SqlQuery<string>("sp_GetNotesData @StoreNum, @CustomerID, @r", param4, param5, param7).First();