【问题标题】: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 列。

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

【问题讨论】:

    标签: c# ado.net firebird firebird2.1


    【解决方案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
    猜你喜欢
    • 2010-10-16
    • 2012-07-12
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    相关资源
    最近更新 更多