none
ASP.NET MySQL и MySqlDataReader RRS feed

  • Общие обсуждения

  • Доброго дня подскажите, пожалуйста, почему выдается одна строка в этом запросе, а должно быть несколько, закомментированный выдает правильный результат. В чем разница? Заранее благодарю.

                'Do While Reader.Read
                '    i = i + 1
                'Loop

    Dim sqlQuery As String = "SELECT t1.Id, t2.KeyPic, t2.X, t2.Y FROM tbl1 AS t1 INNER JOIN tbl2 AS t2 ON (t1.KeyPic = t2.KeyPic) AND (t1.IdSubsection = t2.IdSubsection) WHERE 1000=t1.Id;" Dim strConnect As String strConnect = System.Web.Configuration.WebConfigurationManager.ConnectionStrings("ConnectionString2").ConnectionString.ToString Dim i As Integer Dim myTable = New DataTable Dim Reader As MySqlDataReader Dim conn As New MySqlConnection(strConnect) Try conn.Open() Dim cmd As New MySqlCommand(SqlQuery, conn) Reader = cmd.ExecuteReader 'Do While Reader.Read ' i = i + 1 'Loop If Reader.HasRows Then myTable.Load(Reader) i = myTable.Rows.Count End If Label1.Text = i

    Catch Finally If Not (Reader Is Nothing) Then Reader.Close() conn.Close() End Try



    18 ноября 2013 г. 18:17

Все ответы

  • Потому, что метод Reader.Read читает одну строку результата запроса за раз. Поэтому и надо его опрашивать в цикле, пока все строки не будут прочитаны.

    Сделаем содержимое сообщества лучше, вместе!

    19 ноября 2013 г. 9:32
    Модератор
  •             Do While Reader.Read
                    i = i + 1
                Loop

    Я его и использую в цикле, как раз он мне и дает правильный результат.

    а конструкция

                If Reader.HasRows Then
                    myTable.Load(Reader)
                    i = myTable.Rows.Count
                End If

    выдает только одну строку, вместо множества.

    19 ноября 2013 г. 9:35
  • А вы об этом методе. Насколько я знаю он должен загружать записи целиком, может косяк в реализации интерфейса IDataReader библиотеки MySql. Надо посмотреть документацию.

    Сделаем содержимое сообщества лучше, вместе!

    20 ноября 2013 г. 5:54
    Модератор
  • Я попробовал менять SQL - запросы на выборку, myTable.Load(Reader) выдает правильный результат, когда запрос простой, типа "SELECT t2.X, t2.Y FROM tbl2 AS t2;", а когда конструкция INNER JOIN, всего множества выдает только первое совпадение из tbl1.

    Думаете всё-таки проблема библиотеки MySql или я что-то неправильно делаю?

    Заранее благодарю за ответ.

    использую Connector/Net 6.7.4, взят он с сайта dev.mysql.com/downloads/connector/net/


    • Изменено monteloro 20 ноября 2013 г. 17:15
    20 ноября 2013 г. 11:17