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