从存储过程C#返回一个字符串

时间:2016-01-29 14:19:03

标签: c# sql .net asp.net-mvc stored-procedures

我写了一个存储过程:

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,现在字符串管理器返回""。

2 个答案:

答案 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();