火鸟数据阅读器

Posted

技术标签:

【中文标题】火鸟数据阅读器【英文标题】:Firebird dataReader 【发布时间】:2016-10-31 07:06:37 【问题描述】:

我想在我的日志文件中查看所有带有列名的数据。

 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 列。

我想检查我没有列名的不同表。

【问题讨论】:

【参考方案1】:

您需要做的就是在迭代结果之前迭代所有打印其名称的字段:

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

我很确定,这会产生丑陋的输出,因为它将每个输出打印到新行。您应该能够更改此设置以打印字段和行中的每条记录。

【讨论】:

感谢您的帮助,它对我有用。对于一行数据,它的工作。对于多行,我更改了我的 writelog 方法。全部设置。【参考方案2】:
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;
    

其中 querystring 是您的查询(例如:select * from yourtablename),connstring 是您的 firebird 连接字符串

【讨论】:

或者您可以直接在 dataadapter 上执行并填充数据集,这将为您提供 columnNames 和 data

以上是关于火鸟数据阅读器的主要内容,如果未能解决你的问题,请参考以下文章

紧凑型火鸟 2.1 数据库

C# 操作FireBird(火鸟)数据库

C# 操作FireBird(火鸟)数据库

火鸟默认字符集

转换为 ActiveRecord 查询(火鸟数据库)时导致错误的原始 SQL 查询

德尔福火鸟汽车