首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >火鸟dataReader

火鸟dataReader
EN

Stack Overflow用户
提问于 2016-06-28 19:39:50
回答 2查看 5.2K关注 0票数 2

我希望在日志文件中看到所有列名的数据。

代码语言:javascript
复制
 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列。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-29 12:57:25

您所需要做的就是对所有字段进行迭代,在迭代结果之前打印它们的名称:

代码语言:javascript
复制
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());
    } 
}

我非常肯定,这会给出丑陋的输出,因为它会将每一个输出打印到一个新的行。您应该能够将其更改为以行方式打印字段和每条记录。

票数 4
EN

Stack Overflow用户

发布于 2016-12-01 02:49:09

代码语言:javascript
复制
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是您的查询(例如:从您的yourtablename中选择*),连接字符串是您的firebird连接字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38084939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档