运行 相同的查询第二次导致错误
Running the same query causing error the second time
我有一个 Data-table,其中包含 select 查询所需的所有必填字段。现在我正在从数据的第一行获取数据-table 和 运行 一个 select 查询(如下所示)。第一次它工作正常。
现在我在第二行给出所有必填字段(就像我在第一行所做的那样)和 运行 select 查询它给出的错误 "insufficient permissions"。当我在 Oracle SQL Developer 中手动 运行 两个 select 查询(实际上相同但参数不同)时,它工作正常。
Query1: select cloumnname1 from table where columnname2='valueA' and columnname3= 'VALUEB'
Query2: select cloumnname1 from table where columnname2='valueA' and columnname3= 'VALUEB'
从数据库中获取数据
public OracleDataReader ExecuteReader(string SelectQuery, string conString)
{
try
{
OpenDbConnection(conString);
OracleCommand cmd = new OracleCommand();
cmd.Connection = con;
cmd.CommandText = SelectQuery;
cmd.CommandType = System.Data.CommandType.Text;
OracleDataReader ora_dataReader = cmd.ExecuteReader();
return ora_dataReader;
}
catch (Exception ex)
{
throw ex;
}
finally
{
}
}
编辑:
忘了说我在下面给出的另一个函数中调用这个函数
public DataTable GetDataFromDB(string SelectQuery, string conString)
{
try
{
DataTable dt = new DataTable();
dt.Load(ExecuteReader(SelectQuery,conString));
return dt;
}
catch (Exception ex)
{
throw ex;
}
finally
{
CloseDbConnection();
}
}
You need to open and close the connection after each query execution.
还有return关闭连接后的OracleDataReader,否则会导致内存泄漏。如果在关闭连接之前 return OracleDataReader,您会得到同样的错误。
尝试这样的事情:
public OracleDataReader ExecuteReader(string SelectQuery, string conString)
{
try
{
OpenDbConnection(conString);
OracleCommand cmd = new OracleCommand();
con.Open();
cmd.Connection = con;
cmd.CommandText = SelectQuery;
cmd.CommandType = System.Data.CommandType.Text;
OracleDataReader ora_dataReader = cmd.ExecuteReader();
}
catch (Exception ex)
{
Logging.LogMessage(Logging.LogLevel.Error, 0, "DAL", this.GetType().Name, ex.Message + " : " + ex.StackTrace);
throw ex;
}
finally
{
con.close();
con.Dispose();
}
return ora_dataReader;
}
此参考资料中的更多信息:https://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracledatareader(v=vs.110).aspx
您需要关闭数据库连接,然后再打开它,然后再启动您的第二个查询。
类似于:
SqlConnection.Open();
和
SqlConnection.Close();
您需要确保 关闭 Connection
和 DataReader
对象。
尝试在 ExecuteReader
中使用 CommandBehavior
参数,因为一旦您关闭 DataReader
.
,它将 close the connection automatically
cmd.ExecuteReader(CommandBehavior.CloseConnection)
我有一个 Data-table,其中包含 select 查询所需的所有必填字段。现在我正在从数据的第一行获取数据-table 和 运行 一个 select 查询(如下所示)。第一次它工作正常。 现在我在第二行给出所有必填字段(就像我在第一行所做的那样)和 运行 select 查询它给出的错误 "insufficient permissions"。当我在 Oracle SQL Developer 中手动 运行 两个 select 查询(实际上相同但参数不同)时,它工作正常。
Query1: select cloumnname1 from table where columnname2='valueA' and columnname3= 'VALUEB'
Query2: select cloumnname1 from table where columnname2='valueA' and columnname3= 'VALUEB'
从数据库中获取数据
public OracleDataReader ExecuteReader(string SelectQuery, string conString)
{
try
{
OpenDbConnection(conString);
OracleCommand cmd = new OracleCommand();
cmd.Connection = con;
cmd.CommandText = SelectQuery;
cmd.CommandType = System.Data.CommandType.Text;
OracleDataReader ora_dataReader = cmd.ExecuteReader();
return ora_dataReader;
}
catch (Exception ex)
{
throw ex;
}
finally
{
}
}
编辑: 忘了说我在下面给出的另一个函数中调用这个函数
public DataTable GetDataFromDB(string SelectQuery, string conString)
{
try
{
DataTable dt = new DataTable();
dt.Load(ExecuteReader(SelectQuery,conString));
return dt;
}
catch (Exception ex)
{
throw ex;
}
finally
{
CloseDbConnection();
}
}
You need to open and close the connection after each query execution.
还有return关闭连接后的OracleDataReader,否则会导致内存泄漏。如果在关闭连接之前 return OracleDataReader,您会得到同样的错误。
尝试这样的事情:
public OracleDataReader ExecuteReader(string SelectQuery, string conString)
{
try
{
OpenDbConnection(conString);
OracleCommand cmd = new OracleCommand();
con.Open();
cmd.Connection = con;
cmd.CommandText = SelectQuery;
cmd.CommandType = System.Data.CommandType.Text;
OracleDataReader ora_dataReader = cmd.ExecuteReader();
}
catch (Exception ex)
{
Logging.LogMessage(Logging.LogLevel.Error, 0, "DAL", this.GetType().Name, ex.Message + " : " + ex.StackTrace);
throw ex;
}
finally
{
con.close();
con.Dispose();
}
return ora_dataReader;
}
此参考资料中的更多信息:https://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracledatareader(v=vs.110).aspx
您需要关闭数据库连接,然后再打开它,然后再启动您的第二个查询。
类似于:
SqlConnection.Open();
和
SqlConnection.Close();
您需要确保 关闭 Connection
和 DataReader
对象。
尝试在 ExecuteReader
中使用 CommandBehavior
参数,因为一旦您关闭 DataReader
.
cmd.ExecuteReader(CommandBehavior.CloseConnection)