因此,我尝试从字符串执行存储过程以获取大量数据,但我得到了
数据阅读器有多个字段。多个字段对EDM原语或枚举类型无效
我如何执行我的存储过程
public class CarBLL
{
public static string GetCar(string carnumberxx, string authTicketxx)
{
using (var context = new SindalDBEntities())
{
var doerTicket = "0x0100000067294c938207c9e5e0cb6b98ddc4edd9464bc14e68b59cbc73c9dc559c5d43ad9b3705d1720a52542e0220b7df11b2e4bd913d873b1aa18c";
var stamdata = "G0057";
String sql =
"SET NOCOUNT ON; " +
"EXEC [file].[usp_getCar] " +
"@p_CarNumber= '" + stamdata + "', " +
"@p_DoerTicket= '" + doerTicket + "' ";
List<SqlParameter> sqlParams = new List<SqlParameter>();
sqlParams.Add(new SqlParameter("CarNumber", System.Data.SqlDbType.VarChar, 100, stamdata));
sqlParams.Add(new SqlParameter("DoerTicket", System.Data.SqlDbType.VarChar, 100, doerTicket));
return context.Database.SqlQuery<string>(sql).FirstOrDefault<string>();
}
}
}
}
如果我尝试从SP中排除我的一个参数
public static usp_getCar_Result GetCar(string carnumber, string authTicket)
{
using (var context = new SindalDBEntities())
{
int? id = null;
// ObjectParameter Id = new ObjectParameter("p_ID", typeof(global::System.Int32));
// ObjectResult result = new ObjectResult("usp_getCar_Result", typeof(string));
return context.usp_getCar(id, carnumber, authTicket).FirstOrDefault();
}
}
}
}
我得到了
其他信息:数据阅读器与指定的&#39; SindalDbModel.usp_getCar_Result&#39;不兼容。该类型的成员&#39; ID1&#39;在数据阅读器中没有相应的具有相同名称的列。
答案 0 :(得分:1)
将usp_getCar
存储过程导入DbContext会更好。请参阅此tutorial。
在这种情况下,您的SindalDBEntities
中会有一个强类型的方法。所以你将能够执行它:
return context.GetCar(stamdata, doerTicket).FirstOrDefault();