2010-12-10 4 views
0

У меня есть функция, как этотчитатель не читает данные

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(); 
} 

отладки, это дает результат, пока соединение открыто, но Ридер вар не читает данные.

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

+0

Вы хотите сказать, что он выполняется без каких-либо исключений, но не дает никаких данных? Что показывает SQL Profiler? – 2010-12-10 11:35:55

+0

Можете ли вы дать подробную информацию об исключении и получить – 2010-12-10 11:36:21

ответ

0

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

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

private string _name; 

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

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

0

Видел здесь в MSDN: Reader

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

Так, может быть, попробовать с reader[0] вместо reader.getString(0)?

Edit:

Попробуйте с этим:

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. 
0

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

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