2013-02-22 46 views
0

我试图检索数据库表中的所有People。该表由以下列组成:使用C从SQL Server检索表数据#

ID, FirstName, LastNamre, Age, School 

在下面的代码中,我只保存表中的前2个值。在那里我想将表中的所有值保存到列表中。

我已经突出显示了以下代码的一部分;

i.Add(new SelectListItem 
     { 
      Value = sql.GetInt32(0).ToString(), 
      Text = sql.GetString(1) 
     }); 

完整的代码;

public List<SelectListItem> getAllPeople() 
{ 
    var i = new List<SelectListItem>(); 

    try 
    { 
     using (SqlCommand com = new SqlCommand("SELECT * FROM USERS", con)) 
     { 
      con.Open(); 

      SqlDataReader sql = com.ExecuteReader(); 

      while (sql.Read()) 
      { 
       i.Add(new SelectListItem 
         { 
          Value = sql.GetInt32(0).ToString(), 
          Text = sql.GetString(1) 
         }); 
      } 
     } 
    } 
    ... 

UPDATE

我的视图类,如何在视图中显示的价值?

@model MyPro.Models.MyPersonModel 

.... 

@using (Html.BeginForm()) 
{ 
... 


@foreach (var item in MyPro.Models.MyPersonModel) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.?????) 
     </td> 
+0

什么问题?你发表声明,不是问题! – Maris 2013-02-22 06:04:49

+0

我只保存'i'中的第一个,两个记录。我需要将'ID,FirstName,LastNamre,Age,School'的所有表值存储在变量i中。我如何将其他表格文件存储在'变量i'中。 – 2013-02-22 06:05:44

+0

但是为什么你不想像'EF'那样使用'ORMs'? – Maris 2013-02-22 06:08:11

回答

1

您需要创建自己的Person类:

public class Person 
{ 
    public int ID { get;set; } 
    public string FirstName { get;set; } 
    public string LastNamre { get;set; } 
    public int Age { get;set; } 
    public string School { get;set; } 
} 

,然后使用(而不是SelectListItem)当您检索数据时:

public List<Person> getAllPeople() 
{ 
    var people = new List<People>(); 

    try 
    { 
     using (SqlCommand com = new SqlCommand("SELECT * FROM USERS", con)) 
     { 
      con.Open(); 

      SqlDataReader sql = com.ExecuteReader(); 

      while (sql.Read()) 
      { 
       people.Add(new Person 
          { 
           ID = sql.GetInt32(0), 
           FirstName = sql.GetString(1), 
           LastName = sql.GetString(2), 
           Age = sql.GetInt32(3) , 
           School = sql.GetString(4) 
          }); 
      } 
     } 
    } 
+0

我应该在哪里放置Person Class。它在模型中吗?我有一个模型类看起来完全一样。希望你不是指同一个班级? – 2013-02-22 06:14:53

+0

@sharonHwk:是的,它模拟了一个'Person' - 所以我把它放在模型的某个地方 – 2013-02-22 06:19:54

+0

在你的描述中,你曾经说过使用'SelectListItem'。那是什么意思。我上面更新了我的代码。 – 2013-02-22 06:25:35

1

试试这个:

i.Add(new SelectListItem 
{ 
    Value = sql.GetInt32(0).ToString(), 
    Text = sql.GetString(1) + " " + sql.GetString(2) + " - " + sql.GetString(3) + " - " + sql.GetString(4) 
}); 

UPDATE

如果我这样做,我会使用AJAX这样当SelectListItem变化,我只会得到必要的数据通过PeopleID(这是SelectListItem的值),而不是获取数据库中所有People的所有数据。有些东西,如:

$('#SelectListItemId').change(function(){ 
    $.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     url: "People/GetDetails", 
     data: '{ id: this.val() }', 
     success: function (msg) { 
      alert(msg.d); 
     } 
    }); 
}); 

更新后,你的问题中添加视图

既然你不发表您的看法,当我张贴了我的答案,你没有包括您MyPersonModel,我会以为这是你的MyPersonModel

public class MyPersonModel 
{ 
    public int ID { get;set; } 
    public string FirstName { get;set; } 
    public string LastNamre { get;set; } 
    public int Age { get;set; } 
    public string School { get;set; } 
} 

那么我相信你的观点应该是一个IEnumerable<MyPro.Models.MyPersonModel>

@model IEnumerable<MyPro.Models.MyPersonModel> 

.... 

@using (Html.BeginForm()) 
{ 
... 


@foreach (var item in Model) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.FirstName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.LastNamre) 
     </td> 
... 

,并且您retreival代码应该是这样的:

public List<MyPersonModel> getAllPeople() 
{ 
    var people = new List<MyPersonModel>(); 

    try 
    { 
     using (SqlCommand com = new SqlCommand("SELECT * FROM USERS", con)) 
     { 
      con.Open(); 

      SqlDataReader sql = com.ExecuteReader(); 

      while (sql.Read()) 
      { 
       people.Add(new MyPersonModel 
          { 
           ID = sql.GetInt32(0), 
           FirstName = sql.GetString(1), 
           LastNamre = sql.GetString(2), 
           Age = sql.GetInt32(3) , 
           School = sql.GetString(4) 
          }); 
      } 
     } 
    } 
} 

对于Javascript,您的使用SelectListItem让我相信你想在下拉列表中显示People的列表。我只是建议如果是这样的话,我会这样做,我会使用JavaScript来获取其他细节。

+0

好吧,然后我将如何读取视图中的值。我在我的帖子中粘贴了我的视图代码。我希望它在网格中显示。 – 2013-02-22 06:09:59

+0

什么查看代码? – 2013-02-22 06:22:32

+0

请再阅读一次该问题?对于你正在使用的JavaScript? – Maris 2013-02-22 06:24:03

1

添加类:

public class SomeClass 
{ 
    public Int32 ID {get;set; 
    public String FirstName {get;set;} 
    public String LastNamre {get;set;} 
    public Int32 Age {get;set;} 
    public String School {get;set;} 
} 

并修改选择:

  i.Add(new SomeClass 
        { 
         ID = sql.GetInt32(0).ToString(), 
         FirstName = sql.GetString(1), 
         LastNamre = sql.GetString(2), 
         Age = sql.GetInt32(3), 
         School = sql.GetString(4) 
        }); 
+0

'SelectListItem'是一个.NET标准类 - 你不能“覆盖”并重新定义它...... – 2013-02-22 06:12:37

+1

哦,我的坏。修改答案 – Maris 2013-02-22 06:15:28

+0

我应该改变方法签名'公开列表 getAllPeople()'? – 2013-02-22 06:16:45

相关问题