2014-10-24 2 views
0

Как часть проекта по импорту данных в wordpress с помощью скрипинга экрана У меня есть таблица базы данных старого и нового URL-адресов, хранящихся в базе данных MySQL. В приведенном ниже примере команда ExecuteReader не возвращает какие-либо данные (-1 строк), я запускал SQL через workbench и возвращал данные, поэтому это не SQL или данные в базе данных.MySqlDataReader не возвращает данные

В других случаях в коде я вызывал ExecuteNonQuery() и ExecuteScalar() без проблем (так что это не строка соединения).

Любые идеи, что попробовать дальше?

Dim SQL As String 
    Dim conn As MySqlConnection = New MySqlConnection(_CONNECTIONSTRING) 

    SQL = "SELECT OrgURL, NewURL FROM `wp_user`.`tbl_linkdata`" 

    Try 
     conn.Open() 
     Dim cmd As MySqlCommand = New MySqlCommand(SQL, conn) 
     Dim dr As MySqlDataReader = cmd.ExecuteReader() 
     While (dr.Read) 
      LinkHashMap.Add(dr.GetString(0), dr.GetString(1)) 
     End While 
     Console.ForegroundColor = ConsoleColor.Cyan 
     Console.WriteLine("The Hash map contains " + dr.RecordsAffected + " rows") 
     dr.Close() 

    Catch ex As Exception 
     Console.ForegroundColor = ConsoleColor.Red 
     Console.WriteLine("Exception loading the hashtable : " + ex.Message) 
    Finally 
     conn.Dispose() 
    End Try 
+2

[ 'DataReader.RecordsAffected'] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient. sqldatareader.recordsaffected.aspx) всегда возвращает -1 для команды SELECT. Что возвращает «LinkHashMap.Count»? ** Редактировать ** Для 'MySqlDataReader' это одно и то же: http://www.devart.com/dotconnect/mysql/docs/Devart.Data.MySql~Devart.Data.MySql.MySqlDataReader~RecordsAffected.html (_" Количество строк, измененных, вставленных или удаленных. -1 для операторов SELECT «_» –

+0

где «предложение WHERE»? –

+0

Я считаю, что под капотом это вызов «mysql_affected_rows» в соответствии с http://dev.mysql.com/doc/refman/5.0/en/mysql-affected-rows.html «-1» указывает, что запрос возвратил ошибку или что ", но, как я уже сказал, я проверил SQL через workbench. –

ответ

1

DataReader.RecordsAffected всегда возвращает -1 для команды SELECT. Что возвращает LinkHashMap.Count? В MySqlDataReader это то же самое:

«Число строк изменилось, вставленный или удален -1 для отборного заявления.»

Если вы хотите, чтобы подсчитать количество записей, которые можно использовать LinkHashMap.Count.

Вам: «LinkHashMap не„Ничего“»

Как вы хотите добавить что-то к нему без инициализации первого? A NullReferenceException должно было случиться. Так инициализировать словарь (или что это такое) сначала через конструктор:

Dim LinkHashMap As New Dictionary(Of String, String) 
While (dr.Read) 
    LinkHashMap.Add(dr.GetString(0), dr.GetString(1)) 
End While 
+0

Еще раз спасибо Tim. –