如何从string执行存储过程

时间:2017-05-29 09:20:15

标签: c# entity-framework asp.net-web-api

因此,我尝试从字符串执行存储过程以获取大量数据,但我得到了

  

数据阅读器有多个字段。多个字段对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;在数据阅读器中没有相应的具有相同名称的列。

1 个答案:

答案 0 :(得分:1)

usp_getCar存储过程导入DbContext会更好。请参阅此tutorial

在这种情况下,您的SindalDBEntities中会有一个强类型的方法。所以你将能够执行它:

return context.GetCar(stamdata, doerTicket).FirstOrDefault();