如何调用返回带空格的列的存储过程

时间:2016-06-23 16:32:52

标签: c# asp.net-mvc stored-procedures entity-framework-6

我正在尝试使用实体6.0调用存储过程。在查看这些解决方案herehere后,他们没有解决问题。问题是其中一个返回的列中有一个空格(我无法更改存储过程)。我已经尝试了以下但没有成功:

MyModel.cs

using System;
...

namespace ...
{
    public class MyModel
    {
        [Display(Name = "ID")]
        public string id{ get; set; }

        [Display(Name = "Number Of ID")]
        [Column("Number Of ID")]
        public int number_Of_ID { get; set; }

    }

    public class MyModelContext : DbContext
    {
        public DbSet<MyModel> MyModels{ get; set; }
    }
}

MyController.cs

using System;
...

namespace ...
{
    public class MyController : Controller
    {
        private MyEntities db = new MyEntities ();

        public ActionResult Index()
        {

            var query = @"exec usp_getIds";

            var results = db.Database.SqlQuery<MyModel>(query);
            return View(results);
        }
    }

调试代码时,我的模型的值为id,但不是number_Of_ID。该值始终为0.我还尝试将数据类型更改为string,并返回null。请帮忙。

2 个答案:

答案 0 :(得分:1)

您的意思是列名称或值中是否有空格?

对于存储过程usp_getIds,您应该能够:

List<usp_getIds_Result> results = db.usp_getIds().ToList();

将过程添加到模型时,会自动创建类usp_getIds_Result

看看尝试这个是否有帮助。

答案 1 :(得分:1)

虽然我无法使用DBContext,但我找到了使用SQLDataAdapter的解决方案。即使对于有空格的列,我也能成功地进行调用。控制器中更改了以下内容:

MyController.cs

using System;
...

namespace ...
{
    public class MyController : Controller
    {   
        public ActionResult Index()
        {
            var myResultsList = new List<MyModel>();
            string connectionString = ConfigurationManager.AppSettings["myDBConn"];
            var conn = new SqlConnection(connectionString);
            conn.Open();
            string query = @"usp_getIds";
            using (var sqlAdpt = new SqlDataAdapter(query, conn))
            {
                sqlAdpt.SelectCommand.CommandType = CommandType.StoredProcedure;
                var results = new DataSet();
                sqlAdpt.Fill(results);
                myResultsList= results.Tables[0].AsEnumerable().
                Select(dataRow => new MyModel
                    {
                        id = dataRow.Field<string>("ID"),
                        numberOfID = dataRow.Field<int>("Number Of ID")
                    }).ToList();

            }
            return View(myResultsList);
        }
    }