太多会话是打开错误,同时创建与Sql Server Ce的连接

时间:2016-05-17 07:26:14

标签: c# sql-server-ce

我的C#应用​​程序使用 Sql Server Compact Edition ,我在这里与数据库建立了连接。我使用这种方法来运行ExecuteScalar,并且在某些时候我会重复使用它。

这是班级:

//_cnt & _cmd are private variables
public static object Run_ExecuteScaler(string query)
{
    object objResult;
   _cnt = new SqlCeConnection {ConnectionString = ConnectionString};

    _cmd = new SqlCeCommand
        {
            Connection = _cnt,
            CommandType = System.Data.CommandType.Text,
            CommandText = query
        };

    if (_cnt.State != System.Data.ConnectionState.Open)
        _cnt.Open();

    objResult = _cmd.ExecuteScalar();
    _cmd.Dispose();

    if (_cnt.State != System.Data.ConnectionState.Closed)
        _cnt.Close();
    _cnt.Dispose();
    return objResult;
}

我在foreach循环中使用此行,该循环使用上述方法来创建与数据库的连接并运行命令。然后关闭连接,然后处理

var middleCat = RSSql.Run_ExecuteScaler(string.Format(
                "SELECT Implication FROM tblMiddleCategory where IDMiddleCategory='{0}'",someInt));

但是我在第二次循环后遇到了这个错误:

  

开放的会话太多

我意识到这通常发生在没有处理连接时。但我用我的方法做到了。我是以错误的方式做到了吗?

更新

我将方法改为使用using语句作为@Damien_The_Unbeliever提供:

public static object Run_ExecuteScaler(string query)
{
    object objResult = null;
    using (_cnt = new SqlCeConnection( ConnectionString))
    {
        _cmd = new SqlCeCommand
        {
            Connection = _cnt,
            CommandType = System.Data.CommandType.Text,
            CommandText = query
        };
        if (_cnt.State != System.Data.ConnectionState.Open)
            _cnt.Open();
        objResult = _cmd.ExecuteScalar();
    }

    return objResult;
}

但我仍然遇到同样的错误。

0 个答案:

没有答案