【问题标题】:Do I need to enable "Multiple Active Result Sets" in app.config?我是否需要在 app.config 中启用“多个活动结果集”?
【发布时间】:2015-03-20 01:26:17
【问题描述】:

根据MSDN,,多个活动结果集 (MARS) 是一项与 SQL Server 一起使用的功能,允许在单个连接上执行多个批处理。启用 MARS 以与 SQL Server 一起使用时,使用的每个命令对象都会向连接添加一个会话。

所以看看我的代码:

private void CreateTablesIfNotExisting()
    {
        try
        {
            using(var cn=new SqlConnection(cnString))
            using(var cmd=cn.CreateCommand())
            {
                cn.Open();
                cmd.CommandText =
                    "IF NOT EXISTS ( "
                    + " SELECT * FROM sys.Tables WHERE NAME='Vehicles')"
                    + " CREATE TABLE Vehicles( "
                    + " VIN varchar(20) PRIMARY KEY, "
                    + " Make varchar(20), "
                    + " Model varchar(20), Year int)";
                cmd.ExecuteNonQuery();
                cmd.CommandText =
                   "IF NOT EXISTS ( "
                   + " SELECT * FROM sys.Tables WHERE NAME='Repairs')"
                   + " CREATE TABLE Repairs( "
                   +" ID int IDENTITY PRIMARY KEY, "
                   + " VIN varchar(20), "
                   + " Description varchar(60), "
                   + " Cost money)";
                cmd.ExecuteNonQuery();
            }
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

我有一个连接但有两个cmd.ExecuteNonQuery();,我应该在app.config 中添加MultipleActiveResultSets=True 吗?

【问题讨论】:

    标签: c# sql-server ado.net


    【解决方案1】:

    您不需要 MARS。仅当两个查询同时处于活动状态时才需要 MARS。在这里,您在开始下一批之前完成了一批。

    此外,您甚至不需要为此调用两次ExecuteNonQuery()。您可以将这两个语句放入同一个 sql 字符串中,然后一次访问数据库即可完成这一切:

    private void CreateTablesIfNotExisting()
    {
        string sql =
                    "IF NOT EXISTS ( "
                    + " SELECT * FROM sys.Tables WHERE NAME='Vehicles')"
                    + " CREATE TABLE Vehicles( "
                    + " VIN varchar(20) PRIMARY KEY, "
                    + " Make varchar(20), "
                    + " Model varchar(20), Year int); "
                   + "IF NOT EXISTS ( "
                    + " SELECT * FROM sys.Tables WHERE NAME='Repairs')"
                    + " CREATE TABLE Repairs( "
                    + " ID int IDENTITY PRIMARY KEY, "
                    + " VIN varchar(20), "
                    + " Description varchar(60), "
                    + " Cost money);";
        try
        {
            using(var cn=new SqlConnection(cnString))
            using(var cmd=new SqlCommand(sql,cn))
            {
                cn.Open();
                cmd.ExecuteNonQuery();
            }
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多