为什么在Command.ExecuteNonQuery()之后关闭连接? [英] Why is connection closed after Command.ExecuteNonQuery()?

查看:204
本文介绍了为什么在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 a using block. When execution leaves the using block, Connection.Dispose() is implicitly called, and Connection.Dispose() will call Connection.Close().

If you wish to keep the connection open, you will need to not use a using block and manually call Dispose() when you no longer require the connection.


It is because of using(Connection) statement. When you use 'using' statement on IDisposable, it calls 'Dispose' method of that object (in that case Connection) 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆