2016-06-28 9 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()); 
    } 
} 

私はそれが新しい行にすべての出力を印刷して、これは醜い出力を与えることを、かなり確信しています。フィールドと行の各レコードを印刷するには、これを変更する必要があります。クエリ文字列は、クエリである(例:yourtablename SELECT * FROM)

+0

あなたのFirebirdれたconnectionStringでは、あなたの助けのために私のためにその作業をお願いします。 1つの行のデータの作業。複数の行のために私は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; 
    } 

とCONNSTRINGが

+0

、またはdataadapterとfillデータセットで直接実行することができます。これはcolumnNamesとdataの両方になります –