2013-09-08 2 views
2

Я использую webmatrix. Мой домашний сервер - Ubuntu/mono/nginx/fastcgi. Мой код прост. У меня есть база данных MySql с таблицей, содержащей 4 записи тестов.Sql select query возвращает только последнюю строку n раз

@{ 
     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 с тем же результатом. Я также запускал запрос на сервере (с использованием шпатлевки) без пробоя, поэтому запрос должен работать. Я много искал для ответа. Я был бы признателен за любую помощь. Заранее спасибо.

+0

Похож на ошибку в моно. –

+0

Спасибо за ваш ответ Майк. Я иду к такому же выводу. Я протестировал его на своей машине Windows, и запрос был выполнен правильно. Возможно, мне придется написать эквивалент SQL-запроса, который я пытаюсь избежать. Любые другие предложения? –

+0

Я не очень-то знаю о том, что должно поддерживать mono. .NET 4.0, но помощник базы данных и WebGrid полагаются на относительно новый тип 'dynamic'. Я предполагаю, что это является причиной проблемы. Попробуйте использовать ADO.NET и создайте собственную таблицу HTML из SqlDataReader. –

ответ

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

Попробуйте его с идентификатором, или если он не работает, удалите div.I есть ощущение, что сетка запускает цикл для отображения результатов, и на каждой итерации предыдущего результата перезаписывается.

+1

Спасибо, что ответили. Я пробовал с id, а затем без div. Тот же результат. Как упоминалось ранее, я не думаю, что это проблема webgrid. Я удалил webgrid и заменил его таблицей, которая использует цикл foreach, и это дало тот же результат. Я думаю, что это проблема с тем, что сам запрос не обрабатывается правильно, что действительно необычно. –

0

После долгих исследований я обнаружил, что был только один пост, который поднял эту проблему. Для полноты, вот URL: 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>  

Ну, вот и все. Надеюсь, это полезно.

Смежные вопросы