Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从存储过程C返回字符串_C#_Sql_.net_Asp.net Mvc_Stored Procedures - Fatal编程技术网

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

C# 从存储过程C返回字符串,c#,sql,.net,asp.net-mvc,stored-procedures,C#,Sql,.net,Asp.net Mvc,Stored Procedures,我编写了一个存储过程: 使用[数据库] 去 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 ALTER过程[数据库表] @StoreNum INT, @客户ID INT, @r VARCHAR100输出 像 开始 从[数据库表]中选择@r=Notes 其中CustomerID=@CustomerID 和存储编号=CAST@StoreNum如Nvarhar10 终止 当我在SQLServerManagementStudio中运行此存储过程时,@r返回我所期望的字符串 但是,对于下面

我编写了一个存储过程:

使用[数据库] 去 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 ALTER过程[数据库表] @StoreNum INT, @客户ID INT, @r VARCHAR100输出 像 开始 从[数据库表]中选择@r=Notes 其中CustomerID=@CustomerID 和存储编号=CAST@StoreNum如Nvarhar10 终止 当我在SQLServerManagementStudio中运行此存储过程时,@r返回我所期望的字符串

但是,对于下面的C代码,我得到了一个错误:无法从int转换为string

            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);
任何帮助都将不胜感激,谢谢


更新-将输出和sqltype添加到参数中,现在字符串管理器返回。

您必须更改两件事:

param5值必须为int

为param7设置输出方向


您不应该获取存储过程的返回值;你应该选择结果集

试试这个:

string str = db.Database.SqlQuery<string>("sp_GetNotesData @StoreNum, @CustomerID, @r", param4, param5, param7).First();

欺骗使用字符串类型的输出参数时,需要设置大小和方向。您确实设置了方向,但没有设置大小。若你们不设置大小,你们可能只得到字符串中的一个字符——我看到了更新——你们什么也得不到。继续设置SizedEded代码并调试,控制台返回:数据读取器有多个字段。多个字段对于EDM基元或枚举类型无效。这是因为无法将复杂对象存储在字符串中。实际上我已经能够传递字符串,但是程序失败了,说不能从字符串转换为int
string str = db.Database.SqlQuery<string>("sp_GetNotesData @StoreNum, @CustomerID, @r", param4, param5, param7).First();