Читатель не читает данные

У меня есть такая функция

try { using(var sConnection = new SqlConnection(ConnectionString)) using(var sCommand = sConnection.CreateCommand()) { sCommand.CommandText = @"SELECT TABLE_NAME AS TABLES FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME <> 'dtProperties' ORDER BY TABLE_NAME"; sConnection.Open(); using(var reader = sCommand.ExecuteReader()) // Troublesome line { while(reader.Read()) { sb.AppendLine(reader.GetString(0)); } } } } catch(Exception ex) { //All the exceptions are handled and written in the EventLog. EventLog log = new EventLog("Application"); log.Source = "MFDBAnalyser"; log.WriteEntry(ex.Message); } return sb.ToString(); } 

При отладке он дает результат до открытия соединения, но var Reader не считывает данные.

Может кто-нибудь указать, где ошибка!

Является ли ваш предоставленный код тем же, что и вы?

Странное поведение «работы» при отладке, но не во время выполнения, обычно происходит, если у вас есть собственные инициализирующие свойства get. Что-то вроде этого:

 private string _name; public string Name { get { if (_name == null) { name = string.Empty; } return _name; } set {_name = value;} } 

Поэтому, если вы используете _name напрямую, а отладчик отображает такое свойство, он «случайно» инициализирует вашу собственность перед использованием.

Попробуйте поместить sConnection.Open () перед созданием sCommand.

См. Здесь в MSDN: Reader

  while (reader.Read()) { Console.WriteLine(String.Format("{0}", reader[0])); } 

Так что, возможно, попробуйте с reader[0] вместо reader.getString(0) ?

Изменить :

Попробуйте следующее:

  public Form1() { InitializeComponent(); String ConnectionString = @"Data Source=SERVER\SQLEXPRESS;Initial Catalog=DBNAME;User ID=USER;Password=PWD"; StringBuilder sb = new StringBuilder(); using (SqlConnection sConnection = new SqlConnection(ConnectionString)) { String query = @"SELECT TABLE_NAME AS TABLES FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME <> 'dtProperties' ORDER BY TABLE_NAME"; SqlCommand comand = new SqlCommand(query, sConnection); sConnection.Open(); SqlDataReader reader = comand.ExecuteReader(); if (reader.HasRows) { Console.WriteLine("reader.hasRows == true !"); } else { Console.WriteLine("reader.hasRows == FALSE !"); } while (reader.Read()) { sb.AppendLine(reader.GetString(0)); } } Console.WriteLine(sb.ToString()); } } 

Посмотрите, работает ли это.

Я создал новое приложение Winform, попробовал его, он работает для меня.

Вот мой вывод:

 reader.hasRows == true ! Categorie Chantier ... And all my table names.