从数据库中检索所有数据得到第二行与第一行相同

时间:2015-06-14 11:43:42

标签: c# mysql asp.net-mvc-4

当我将模型和代码组合在同一个类中时,不会出现此问题,但是现在我已经将模型和代码分成不同的类。我做了2列,每个列都有不同的值(数据)。

当我运行程序时,它将从数据库中检索所有数据,这是我得到的结果:(完全错误)

数据库表(用户):

enter image description here

但是,当我从IDE(Visual Studio 2013)检查数据库时,它显示正确:

enter image description here

以下是我正在使用的代码:

模型(UserContext):

public class UserContext
    {
        [Display(Name = "Username:")]
        public string Username
        {
            get;
            set;
        }
    }

控制器:

UserManager manager = new UserManager();

public ActionResult List()
        {
            List<UserContext> user = manager.Fetch();

            return View(user);
        }

代码背后(UserManager):

public List<UserContext> Fetch()
        {
            List<UserContext> users = new List<UserContext>();

            UserContext context = new UserContext();

            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                string query = "SELECT [Username] FROM [User] ORDER BY [Username] ASC";

                conn.Open();

                using (SqlCommand cmd = new SqlCommand(query, conn))
                {
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            context.Username = reader["Username"].ToString();

                            users.Add(context);
                        }
                    }
                }
            }

            return users;
        }

查看(列表视图):

@model  List<Project_Name.Models.UserContext>

@{
    ViewBag.Title = "User List";
}

<h2>User List</h2>
<br />

<table id="example" class="display" cellspacing="0" width="100%">
    <thead>
        <tr>
            <th>
                Username
            </th>
        </tr>
    </thead>

    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.Label(item.Username)
                </td>
            </tr>
        }
    </tbody>
</table>

问题是因为我将UserManager类放在Models文件夹之外,将UserContext放在Models文件夹中?

非常感谢。

你的回答非常感谢。

4 个答案:

答案 0 :(得分:1)

您的第一个问题出在您的UserManager中。您需要为从数据库中读取的每一行创建一个新的UserContext。

移动

UserContext context = new UserContext();

从哪里到

while (reader.Read()) { 

答案 1 :(得分:1)

您的错误发生是因为您只声明了context的一个实例,并且在UserName循环中不断更新其while(在while循环中,您只需添加它的另一个引用集合)

您需要在循环中声明一个新实例

while (reader.Read())
{
  UserContext context = new UserContext();
  context.Username = reader["Username"].ToString();
  users.Add(context);
}

答案 2 :(得分:1)

您需要在&#34;每个&#34;中创建新实例。 while循环迭代如下:

while (reader.Read())
{
  UserContext context = new UserContext();
  .....
  .........;
}

答案 3 :(得分:0)

您没有WHERE条款。你总是最终会选出最后一个人。