Sql select查询只返回最后一行n次

时间:2013-09-08 12:45:50

标签: mysql sql select webmatrix webgrid

我正在使用webmatrix。我的家庭服务器是Ubuntu / mono / nginx / fastcgi。我的代码很简单。 我有一个MySql数据库,其中包含4个测试记录。

@{
        var db = Database.Open("wra");
        var sql = "SELECT * FROM Clients";
        var clientinfo = db.Query(sql);
        WebGrid grid = new WebGrid(clientinfo);
}

<div>
    @grid.GetHtml()
</div>

那是 - 它并不简单。但是,网格仅返回最后一条记录并显示4次(=记录数)。我用其他数据库和表测试了这个结果。没有错误,因此没有堆栈跟踪。 问题似乎不是webgrid,因为它只显示结果。只是为了确定,我删除了webgrid并创建了一个表 - 相同的结果。 这个问题似乎不是数据库,因为我已经使用其他具有相同结果的dbs进行了测试。我还在没有probem的服务器上运行查询(使用putty),因此查询应该有效。 我已经广泛搜索了一个答案。我很感激提供任何帮助。提前谢谢。

2 个答案:

答案 0 :(得分:1)

<div id="grid">
    @grid.GetHtml()
</div>

尝试使用id或者如果它不起作用,删除div。我感觉网格运行循环以显示结果,并且在每次迭代时都会覆盖先前的结果。

答案 1 :(得分:0)

经过大量研究,我发现只有一篇文章提出了这个问题。为了完整性,这里是网址: Incorrect results when looping over recordset using Webmatrix/Mono/MySQL

在以各种方式进行测试后,似乎问题是单声道没有正确执行sql查询。鉴于其他人似乎没有将此记录为问题,我只能假设它是我安装中的错误。

无论如何,作为一种解决方法,这是我使用webgrid的解决方案,以防其他人感兴趣。

@using System.Collections;
@using System;
@using System.Data;
@using System.Data.SqlClient;
@using System.Dynamic;
@using System.Text;
@using System.Configuration; 
@using MySql.Data.MySqlClient;

@{
   //establish a connection to mysql db using the connection in web.config        
    MySqlConnection dbConn = new  MySqlConnection(ConfigurationManager.ConnectionStrings["myStringName"].ConnectionString);


    //====From here, source data is member table in database=====
    //create a mysql command var to store the sql query and reference to the connection string
    MySqlCommand command1 = new MySqlCommand("SELECT Id, Fname, Lname, Company, Email FROM ClientTable", dbConn);

    //create a mysql adapter to call the command to be executed
    MySqlDataAdapter dap1 = new MySqlDataAdapter(command1);

    //create a dataset to capture the results of the sql query
    DataSet dataset1 = new DataSet();
    //use the adapter to fill data with the results of the query.  
    //ClientTable will be the name of the table in dataset.
    dap1.Fill(dataset1, "ClientTable");

    //iterate dataset to store its info into a list with columnnames
    var clientProfile = new List<dynamic>();
    foreach (DataRow dr in dataset1.Tables["ClientTable"].Rows)
    {
        var obj = (IDictionary<string, object>)new ExpandoObject();
        foreach (DataColumn col in dataset1.Tables["ClientTable"].Columns)
        {
            obj.Add(col.ColumnName, dr[col.ColumnName]);
        }
        clientProfile.Add(obj);
    }

    WebGrid grid = new WebGrid(clientProfile, rowsPerPage:10);
}


   <div id="xyz">
   @grid.GetHtml(tableStyle : "gridtable",
        alternatingRowStyle: "altRow")
   </div>    

嗯,就是这样。希望它有用。