sql - 从 AS400 提取数据时如何显示列标题和数据
问题描述
首先让我说我是一名 DBA,而不是真正的程序员,但我的任务是创建一个可以从我们的 AS400 中提取数据的控制台应用程序。我创建了一个 ODBC 连接,下面的代码只返回每列中的值。我还需要拉列标题。现在我在控制台中显示数据只是为了确保它正确提取,但我的最终目标是转储到 sql 中。
var strSQL = "Select acact,actyp,acord,acsts,acnxt from ITSFILE.ACTIONSF fetch first 100 row only";
OdbcCommand cmd = new OdbcCommand(strSQL, cn);
OdbcDataReader myDataReader;
myDataReader = cmd.ExecuteReader();
while (myDataReader.Read())
{
Console.WriteLine(myDataReader["acact"].ToString() + " " + myDataReader["actyp"].ToString() + " " + myDataReader["acord"].ToString() + " " + myDataReader["acsts"].ToString() + " " + myDataReader["acnxt"].ToString());
Console.ReadLine();
}
myDataReader.Close();
cn.Close();
}
解决方案
我想到了。为了捕获列标题,我曾经使用 OdbcDataAdapter 而不是 OdbcDataReader,并创建了一个循环来首先获取列,然后再获取数据。这对我很有用。请在下面查看我的代码。
var strSQL = "Select acact,actyp,acord,acsts,acnxt from ITSFILE.ACTIONSF fetch first
100 row only";
using (OdbcCommand cmd = new OdbcCommand(strSQL))
{
using (OdbcDataAdapter sda = new OdbcDataAdapter())
{
cmd.Connection = cn;
sda.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
string csv = string.Empty;
string filepath = @"C:\Test\test.csv";
foreach (DataColumn column in dt.Columns)
{
csv += column.ColumnName + ',';
}
csv += "\r\n";
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn column in dt.Columns)
{
csv += row[column.ColumnName].ToString().Replace(",",
";") + ',';
}
csv += "\r\n";
}
File.WriteAllText(filepath, csv.ToString());
}
}
}
推荐阅读
- raspberry-pi - 树莓派 4 - gstreamer 播放
- python - 我正在使用烧瓶,flask_sqlalchemy 分页功能适用于 page1,但不适用于其他页面
- arrays - 访问作为数组的数组(变体)的二维数组中的元素
- java - 重做 foreach 到 .stream().map
- apache-spark - Parquet 模式演化策略
- javascript - 如何更新单个属性?
- android - Android使用dagger2创建viewpager适配器在重新创建活动后不显示片段
- flutter - 使用 FractionalOffset 精确定位小部件
- javascript - 带有 rgb() 的正则表达式
- mongodb - 即使指定 bind_ip=0.0.0.0 也无法从外部连接到 mongodb