跳过第一行数据
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;
}
我编写了连接到 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;
}