C# 从存储过程C返回字符串
我编写了一个存储过程: 使用[数据库] 去 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 ALTER过程[数据库表] @StoreNum INT, @客户ID INT, @r VARCHAR100输出 像 开始 从[数据库表]中选择@r=Notes 其中CustomerID=@CustomerID 和存储编号=CAST@StoreNum如Nvarhar10 终止 当我在SQLServerManagementStudio中运行此存储过程时,@r返回我所期望的字符串 但是,对于下面的C代码,我得到了一个错误:无法从int转换为stringC# 从存储过程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返回我所期望的字符串 但是,对于下面
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();