2016-06-28 8 views
1

Я хотел бы увидеть все данные с именами столбцов в моем файле журнала.Firebird dataReader

private static void ExecuteSQL() 
    { 

     string conn = "User ID=SYSDBA;Password=masterkey;Database=XX.18.137.XXX:C:/ER.TDB;DataSource==XX.18.137.XXX;Charset=NONE;"; 

     FbConnection myConnection = new FbConnection(conn); 
     FbDataReader myReader = null; 
     string sql = "SELECT * FROM RDB$RELATIONS"; 

     FbCommand myCommand = new FbCommand(sql, myConnection); 
     try 
     { 
      myConnection.Open(); 
      myCommand.CommandTimeout = 0; 
      myReader = myCommand.ExecuteReader(); 

      while (myReader.Read()) 
      { 
       // Log.WriteLog(myReader["rdb$relation_name"].ToString()); 

      } 
      myConnection.Close(); 
     } 
     catch (Exception e) 
     { 
      Log.WriteLog(e.ToString()); 
     } 
    } 

Сейчас это только показывает мне колонку rdb$relation_name.

Я хочу проверить разные таблицы, для которых у меня нет имени столбца.

ответ

3

Все, что вам нужно сделать, это перебрать все поля при печати их имен, прежде чем итерация результаты:

private static void ExecuteSQL() 
{ 

    string conn = "User ID=SYSDBA;Password=masterkey;Database=XX.18.137.XXX:C:/ER.TDB;DataSource==XX.18.137.XXX;Charset=NONE;"; 

    FbConnection myConnection = new FbConnection(conn); 
    FbDataReader myReader = null; 
    string sql = "SELECT * FROM RDB$RELATIONS"; 

    FbCommand myCommand = new FbCommand(sql, myConnection); 
    try 
    { 
     myConnection.Open(); 
     myCommand.CommandTimeout = 0; 
     myReader = myCommand.ExecuteReader(); 

     // 1. print all field names 
     for (int i = 0; i < myReader.FieldCount; i++) 
     { 
      Log.WriteLog(myReader.GetName(i)); 
     } 

     // 2. print each record 
     while (myReader.Read()) 
     { 
      // 3. for each record, print every field value 
      for (int i = 0; i < myReader.FieldCount; i++) 
      { 
      Log.WriteLog(myReader[i].ToString()); 
      } 

     } 
     myConnection.Close(); 
    } 
    catch (Exception e) 
    { 
     Log.WriteLog(e.ToString()); 
    } 
} 

Я уверен, что это даст уродливый выход, как он печатает каждый выход на новую строку. Вы должны иметь возможность изменить это, чтобы печатать поля и каждую запись в строках.

+0

спасибо за вашу помощь, его работа для меня. для одной строки данные его работы. для нескольких строк l изменил мой метод writelog. ВСЕ ГОТОВО. – user6363065

0
public static List<string> GetColumnNames(string queryString) 
    { 
     string result = string.Empty; 
     List<string> listOfColumns = new List<string>(); 

     try 
     { 
      using (FbConnection conn = new FbConnection(connString)) 
      { 
       conn.Open(); 

       using (FbCommand cmd = new FbCommand(queryString, conn)) 
       { 
        // Call Read before accessing data. 
        FbDataReader reader = cmd.ExecuteReader(); 

        if (reader.FieldCount > 0) 
        { 
         for (int i = 0; i < reader.FieldCount; i++) 
         { 
          listOfColumns.Add(reader.GetName(i)); 
         } 
        } 
       } 
      } 
     } 

     catch (Exception e) 
     { 
      BinwatchLogging.Log(e); 
     } 

     return listOfColumns; 

     // return result; 
    } 

где строки запроса Ваш запрос (например: выберите * от yourtablename) и connstring Ваш Жар ConnectionString

+0

, или вы можете непосредственно выполнить на dataadapter и заполнить набор данных, в котором вы будете и имена столбцов, и данные –