由于没有正确关闭连接,我的内存泄漏。这是因为使用了一个全局函数来访问数据库(使用不同的sql字符串),但是我返回了一个sqldatareader。我不能在方法中关闭它,也不能关闭到数据库的连接,因为它关闭了对数据的访问!而且在这个方法之外它不能正确地关闭。:。(
不管怎样,是否有方法可以获取sqldatareader授予的离线访问所需的表。这样我可以关闭所有连接,但仍然可以访问表。
注意,返回不同的表,因此存在不同的字段。我不想每次尝试连接时都重复代码。

private SqlDataReader OpenDataStream(String sql)
{
    SqlCommand sqlComm = new SqlCommand();
    sqlComm.Connection = new SqlConnection();
    sqlComm.Connection.ConnectionString = @"Myconnectionstring";
    sqlComm.CommandText = sql;
    sqlComm.Connection.Open();
    SqlDataReader data = null;
    data = sqlComm.ExecuteReader();

    return data;

    // Closing data here, or connection, results in returned object inaccessable.
}

或者在方法之外(在我访问了我需要的内容之后)关闭它的有效工作方式?

最佳答案

尝试DataTable.Load Method方法:

private DataTable OpenDataStream(String sql)
{

    DataTable dt = new DataTable();

    SqlCommand sqlComm = new SqlCommand();
    sqlComm.Connection = new SqlConnection();
    sqlComm.Connection.ConnectionString = @"Myconnectionstring";
    sqlComm.CommandText = sql;
    sqlComm.Connection.Open();
    SqlDataReader data = null;
    data = sqlComm.ExecuteReader();

    dt.Load(data);

    data.Close();

    return dt;
}

关于c# - C#如何使sqlDataReader脱机?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7913461/

10-12 02:39