我知道之前已经问了很多这个问题,但在这种情况下,我认为这与在查询中使用SELECT
有关,因为我使用简单的{{1运行完全相同的代码语句和它总是返回一个表,并且我已经检查了sqlplus命令行中的JOIN
查询并且总是有结果,所以它不是查询本身的问题
方法是:
public static DataView method()
{
DBConnection db = new DBConnection();
db.Connect();
db.SetSql("select column1, column2, column3 from table1 natural join table2");
DataSet result = db.RetrieveRecords();
DataView source = new DataView(result.Tables[0]);
db.Dispose();
return source;
}
我使用相同的方法在应用程序中填充不同的数据网格,唯一的区别是db.SetSql
中的查询,即select column1, column2 from table1
。该数据网格总是很好地填充,即使查询结果是0行,它只显示网格为空并且不会抛出错误。
就像我说的那样,JOIN
查询在命令行中给出了结果,但是当我运行我的应用程序时,在DataView source = new DataView(result.Tables[0]);
行
是否可能类似于使用JOIN
时结果不被视为表格?
DBConnection.RetrieveRecords()
的代码:
public DataSet RetrieveRecords()
{
OracleDataAdapter DataAdapter = null;
DataSet result = new DataSet();
try
{
command.Connection = connection; //command is OracleCommand and connection is OracleConnection
DataAdapter = new OracleDataAdapter(command);
DataAdapter.Fill(result);
}
catch (Exception )
{
autoDisconnect = true;
throw new Exception(ex.ToString());
}
//Cleaning
finally
{
if (command.Parameters.Count > 0)
{
foreach (OracleParameter pram in command.Parameters)
{
pram.Dispose();
}
}
if (command != null)
{
command.Dispose();
}
if (DataAdapter != null)
{
DataAdapter.Dispose();
}
if (autoDisconnect)
{
Dispose();
}
}
return result;
}
DBConnection.SetSql()
(如果重要的话):
public void SetSql(string sql)
{
command = new OracleCommand(sql);
command.BindByName = true;
}