Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否需要启用";“多个活动结果集”;在app.config中?_C#_Sql Server_Ado.net - Fatal编程技术网

C# 我是否需要启用";“多个活动结果集”;在app.config中?

C# 我是否需要启用";“多个活动结果集”;在app.config中?,c#,sql-server,ado.net,C#,Sql Server,Ado.net,根据多个活动结果集(MARS)的说法,它是一种与SQL Server配合使用的功能,允许在单个连接上执行多个批处理。当启用MARS与SQL Server一起使用时,使用的每个命令对象都会向连接添加一个会话 看看我的代码: private void CreateTablesIfNotExisting() { try { using(var cn=new SqlConnection(cnString)) usin

根据多个活动结果集(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
。只有当两个查询同时处于活动状态时,才需要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);
    }
}