第二次运行相同的查询导致错误

问题描述 投票:2回答:3

我有一个数据表,其中包含select查询所需的所有必填字段。现在我从数据表的第一行获取数据并运行一个select查询(如下所示)。这是第一次工作正常。现在我正在进行第二行并给出所有必填字段(正如我为第一行所做的那样)并运行select查询,它给出错误“权限不足”。当我在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();
            }
        }
c# mysql sql .net oracle-sqldeveloper
3个回答
1
投票

您需要在每次执行查询后打开和关闭连接。

并在关闭连接后返回OracleDataReader,否则会导致内存泄漏。如果在关闭连接之前返回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


1
投票

在启动第二个查询之前,您需要关闭数据库连接并再次打开它。

就像是:

SqlConnection.Open();

SqlConnection.Close();

1
投票

您需要确保关闭ConnectionDataReader对象。

尝试在CommandBehavior中使用ExecuteReader参数,因为一旦你关闭close the connection automatically它将DataReader

cmd.ExecuteReader(CommandBehavior.CloseConnection)
© www.soinside.com 2019 - 2024. All rights reserved.