首页 > 解决方案 > 从 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();
        }

标签: sql.netibm-midrangeodbcdatareader

解决方案


我想到了。为了捕获列标题,我曾经使用 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());
                }
            }
        }

推荐阅读