Пропустить первую строку данных - PullRequest
0 голосов
/ 27 июня 2019

Я написал код для подключения к базе данных NETEZZA.При получении ответа первая строка результата исчезает, т.е. отображаются только 9 из 10 строк.Я прочитал, что есть проблемы с драйвером 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;
        }
    }

Я хочу получить всестроки из базы данных

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

oReader.Read() читает первую строку результата.AppData.Load также делает это, первая строка результата игнорируется.Чтобы исправить это, удалите блок if, просто передайте считыватель напрямую.

Также используйте блоки using при создании случаев, когда тип реализует IDisposable.Это гарантирует, что ресурсы всегда освобождаются даже в случае исключения.

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;
}
0 голосов
/ 27 июня 2019

Я бы порекомендовал использовать OleDbDataAdapter .Попробуйте как:

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