为什么在Command.ExecuteNonQuery()之后关闭连接? [英] Why is connection closed after Command.ExecuteNonQuery()?
本文介绍了为什么在Command.ExecuteNonQuery()之后关闭连接?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
private static string connectionString = @ 用户ID = ****;密码= ****;主机= ****;数据库= ****;持久安全信息=真;
public MySqlConnection Connection = null ;
public MySqlTransaction Transaction = null ;
private MySqlCommand Command = null ;
public LinqDataContext( string p_ConnectionString = )
{
if ( string .IsNullOrWhiteSpace(p_ConnectionString)== false )
{
connectionString = p_ConnectionString;
}
Connection = new MySqlConnection(connectionString);
}
public int InsertPayee(System.Nullable< int> p_StoreID,System.Nullable< int> p_PayeeID, string p_PayeeName, string p_StreetAddress, string p_City,System.Nullable< int> p_StateID , string p_ZipCode, string p_PhoneNumber, string p_EmailAddress, string p_Notes,System.Nullable< int> p_CarrierID,System.Nullable< bool> p_IsActive,System.Nullable< int> p_RegisterID)
{
使用(连接)
{
if (Connection.State!= ConnectionState.Open)
{
Connection.Open();
}
Command = new MySqlCommand( InsertPayee,Connection);
Command.CommandType = CommandType.StoredProcedure;
if (Transaction!= null )
{
命令。交易=交易;
}
Command.Parameters.Add( new MySqlParameter( p_StoreID,p_StoreID));
Command.Parameters.Add( new MySqlParameter( p_PayeeID,p_PayeeID));
Command.Parameters.Add( new MySqlParameter( p_PayeeName,p_PayeeName));
Command.Parameters.Add( new MySqlParameter( p_StreetAddress,p_StreetAddress));
Command.Parameters.Add( new MySqlParameter( p_City,p_City));
Command.Parameters.Add( new MySqlParameter( p_StateID,p_StateID));
Command.Parameters.Add( new MySqlParameter( p_ZipCode,p_ZipCode));
Command.Parameters.Add( new MySqlParameter( p_PhoneNumber,p_PhoneNumber));
Command.Parameters.Add( new MySqlParameter( p_EmailAddress,p_EmailAddress));
Command.Parameters.Add( new MySqlParameter( p_Notes,p_Notes));
Command.Parameters.Add( new MySqlParameter( p_CarrierID,p_CarrierID));
Command.Parameters.Add( new MySqlParameter( p_IsActive,p_IsActive));
Command.Parameters.Add( new MySqlParameter( p_RegisterID,p_RegisterID));
return Command.ExecuteNonQuery();
}
}
解决方案
您的查询包含在中使用
块。当执行离开使用
块时,隐式调用Connection.Dispose()
,并且连接.Dispose()
将调用Connection.Close()。
如果你希望保持连接打开,您需要不使用使用
块并手动调用Dispose()
当你不再需要连接时。
这是因为使用(连接)
语句。当你在IDisposable
上使用'使用
'语句时,它会调用'Dispose
'该对象的方法(在这种情况下连接
)导致关闭连接。
如果你不使用'使用
'你的连接仍然在'打开
'状态。
更多信息:
http://msdn.microsoft.com/en-us//library/yh598w02 .aspx [ ^ ]
private static string connectionString = @"User Id=****;Password=****;Host=****;Database=****;Persist Security Info=True";
public MySqlConnection Connection = null;
public MySqlTransaction Transaction = null;
private MySqlCommand Command = null;
public LinqDataContext(string p_ConnectionString = "")
{
if (string.IsNullOrWhiteSpace(p_ConnectionString) == false)
{
connectionString = p_ConnectionString;
}
Connection = new MySqlConnection(connectionString);
}
public int InsertPayee(System.Nullable<int> p_StoreID, System.Nullable<int> p_PayeeID, string p_PayeeName, string p_StreetAddress, string p_City, System.Nullable<int> p_StateID, string p_ZipCode, string p_PhoneNumber, string p_EmailAddress, string p_Notes, System.Nullable<int> p_CarrierID, System.Nullable<bool> p_IsActive, System.Nullable<int> p_RegisterID)
{
using (Connection)
{
if (Connection.State != ConnectionState.Open)
{
Connection.Open();
}
Command = new MySqlCommand("InsertPayee", Connection);
Command.CommandType = CommandType.StoredProcedure;
if (Transaction != null)
{
Command.Transaction = Transaction;
}
Command.Parameters.Add(new MySqlParameter("p_StoreID", p_StoreID));
Command.Parameters.Add(new MySqlParameter("p_PayeeID", p_PayeeID));
Command.Parameters.Add(new MySqlParameter("p_PayeeName", p_PayeeName));
Command.Parameters.Add(new MySqlParameter("p_StreetAddress", p_StreetAddress));
Command.Parameters.Add(new MySqlParameter("p_City", p_City));
Command.Parameters.Add(new MySqlParameter("p_StateID", p_StateID));
Command.Parameters.Add(new MySqlParameter("p_ZipCode", p_ZipCode));
Command.Parameters.Add(new MySqlParameter("p_PhoneNumber", p_PhoneNumber));
Command.Parameters.Add(new MySqlParameter("p_EmailAddress", p_EmailAddress));
Command.Parameters.Add(new MySqlParameter("p_Notes", p_Notes));
Command.Parameters.Add(new MySqlParameter("p_CarrierID", p_CarrierID));
Command.Parameters.Add(new MySqlParameter("p_IsActive", p_IsActive));
Command.Parameters.Add(new MySqlParameter("p_RegisterID", p_RegisterID));
return Command.ExecuteNonQuery();
}
}
解决方案
Your query is contained inside ausing
block. When execution leaves theusing
block,Connection.Dispose()
is implicitly called, andConnection.Dispose()
will callConnection.Close().
If you wish to keep the connection open, you will need to not use ausing
block and manually callDispose()
when you no longer require the connection.
It is because ofusing(Connection)
statement. When you use 'using
' statement onIDisposable
, it calls 'Dispose
' method of that object (in that caseConnection
) which results in closed connection.
If you don't use 'using
' your connection remains in 'Open
' state.
For more information:
http://msdn.microsoft.com/en-us//library/yh598w02.aspx[^]
这篇关于为什么在Command.ExecuteNonQuery()之后关闭连接?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文