我需要在 app.config 中启用 "Multiple Active Result Sets" 吗?
Do I need to enable "Multiple Active Result Sets" in app.config?
根据 MSDN, 多活动结果集 (MARS) 是一项与 SQL 服务器一起使用的功能,允许在单个连接上执行多个批处理。当启用 MARS 以与 SQL 服务器一起使用时,使用的每个命令对象都会向连接添加一个会话。
所以看看我的代码:
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。如果两个查询同时处于活动状态,则只需要 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);
}
}
根据 MSDN, 多活动结果集 (MARS) 是一项与 SQL 服务器一起使用的功能,允许在单个连接上执行多个批处理。当启用 MARS 以与 SQL 服务器一起使用时,使用的每个命令对象都会向连接添加一个会话。
所以看看我的代码:
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。如果两个查询同时处于活动状态,则只需要 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);
}
}