跳过第一行数据

The first data line skip

我编写了连接到 NETEZZA 数据库的代码。收到响应后,结果的第一行消失,即仅显示 10 行中的 9 行。听说OLEDB驱动有这样的问题,但我自己解决不了。

我尝试添加参数 HDR = YES

class SQL_zapros
{
        private string connString = "Provider=NZOLEDB;Password=PASSWORD; User ID=LOGIN; Data Source=127.0.0.1; Initial Catalog=SYSTEM; Persist Security Info=True;";
        public string sqlcomm = "";


        public DataTable exeReader(string cmd, OleDbParameter[] param)
        {
            OleDbConnection oConn = new OleDbConnection(connString);
            OleDbCommand oCmd;
            OleDbDataReader oReader;
            DataTable AppData = new DataTable();
            oConn.Open();
            oCmd = oConn.CreateCommand();
            oCmd.CommandText = cmd;

            try
            {
                oReader = oCmd.ExecuteReader();
                if (oReader.Read())
                {
                    AppData.Load(oReader);
                    oReader.Close();
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            oConn.Close();
            return AppData;
        }
    }

我想从数据库中获取所有行

我建议改用 OleDbDataAdapter。试一试:

...  
    OleDbDataAdapter adapter = new OleDbDataAdapter();
    adapter.SelectCommand = new OleDbCommand(cmd, oConn);
    adapter.Fill(AppData);    
...

oReader.Read() 读取结果的第一行。 AppData.Load 也这样做,结果的第一行被忽略。要修复它,请删除 if 块,只需直接传递 reader。

在创建类型实现 IDisposable 的实例时也使用 using 块。这确保即使在发生异常时也始终释放资源。

public DataTable exeReader(string cmd, OleDbParameter[] param)
{
    using(OleDbConnection oConn = new OleDbConnection(connString))
    {
        DataTable AppData = new DataTable();
        oConn.Open();
        var oCmd = oConn.CreateCommand();
        oCmd.CommandText = cmd;

        try
        {
            using(var oReader = oCmd.ExecuteReader()) {
                AppData.Load(oReader);
            }
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message);
        }
    }
    return AppData;
}