111,097
社区成员




private void Test()
{
string sql = $@"SELECT * FROM tab WHERE name = 'ABC'";
string connectString = "...";
this.Cursor = Cursors.WaitCursor;
mrpSteps = OracleHelper.GetDataTable(sql, connectString); //此处有时、在有的机器上返回空的DataTable,数据是肯定存在的
}
public static class OracleHelper
{
public static DataTable GetDataTable(string sql, string connectionString)
{
DataTable dataTable = new DataTable();
using (OracleDataAdapter dataAdapter = new OracleDataAdapter())
{
dataAdapter.SelectCommand = new OracleCommand
{
Connection = new OracleConnection(connectionString),
CommandType = CommandType.Text,
CommandText = sql
};
dataAdapter.Fill(dataTable);
}
return dataTable;
}
}
public static DataTable GetDataTable(string sql, string connectionString)
{
DataTable dataTable = new DataTable();
DataSet dataSet=new DataSet();
using (OracleDataAdapter dataAdapter = new OracleDataAdapter())
{
dataAdapter.SelectCommand = new OracleCommand
{
Connection = new OracleConnection(connectionString),
CommandType = CommandType.Text,
CommandText = sql
};
dataAdapter.Fill(dataSet);
If(dataSet.Tables.Count > 0){
dataTable = dataSet.Tables(0);
}
}
return dataTable;
}
DataTable dataTable = new DataTable();
using (OracleConnection conn = new OracleConnection(connString))
{
conn.Open();
using (OracleCommand cmd = conn.CreateCommand())
{
cmd.CommandTimeout = int.MaxValue;
cmd.CommandText = sql;
using (OracleDataAdapter adapter = new OracleDataAdapter(cmd))
{
adapter.Fill(dataTable);
}
}
}
return dataTable;
注意看,楼主的代码 虽然 new OracleConnection,但却没有 释放这个 OracleConnection —— 不手动Dispose,就得等好久之后 GC回收时 可能会回收这个 OracleConnection public static DataTable GetDataTable(string sql, string connectionString)
{
DataTable dataTable = new DataTable();
using (OracleDataAdapter dataAdapter = new OracleDataAdapter())
{
try
{
dataAdapter.SelectCommand = new OracleCommand
{
Connection = new OracleConnection(connectionString),
CommandType = CommandType.Text,
CommandText = sql
};
dataAdapter.Fill(dataTable);
}
catch (OracleException ex)
{
MessageBox.Show("出错了,请将此画面抓图发给管理员\n" + sql + "\n" + ex.Message, "错误");
}
catch (Exception ex)
{
MessageBox.Show("出错了,请将此画面抓图发给管理员\n" + sql + "\n" + ex.Message, "错误");
}
}
return dataTable;
}