zoukankan      html  css  js  c++  java
  • 保证C# 多线程 UI 响应

    Form1.cs

    using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Text; 
    using System.Windows.Forms; 
    using System.Threading; 
     
    namespace WindowsApplication 

        public partial class Form1 : Form 
        { 
            public Form1() 
            { 
                InitializeComponent(); 
            } 
     
            class myclass 
            { 
                //单参数构造 
                public myclass(DataGridView dw1) 
                { 
                    dw = dw1; 
                } 
                
                public delegate void mydelegate(); 
                public DataGridView dw = new DataGridView(); 
     
                //Invoke 
                public void C() 
                { 
                    mydelegate mc = new mydelegate(B); 
                    mc.Invoke(); 
     
                } 
     
                //DynamicInvoke 
                public void D() 
                { 
                    mydelegate mc = new mydelegate(B); 
                    mc.DynamicInvoke(); 
     
                } 
                
                //BeginInvoke 
                public void E() 
                { 
                    mydelegate mc = new mydelegate(B); 
                    AsyncCallback asc = new AsyncCallback(F); 
                  //  mc.BeginInvoke(asc,1); 
                    mc.BeginInvoke(nullnull); //不回调 
     
                   
                    
     
                } 
     
                //E的回调方法 
                  public void F( IAsyncResult result) 
                { 
                    MessageBox.Show("方法E完成,此为回调函数"); 
                     
                } 
     
      
               //基本方法 
                public void B() 
                { 
     
                      CheckForIllegalCrossThreadCalls = false;   
                      dw.DataSource = SQLServerDAL.DbHelperSQL.Query("select  top 200000 *  from  费用表").Tables[0].DefaultView; 
                     
                      
                } 
     
                //A方法用线程处理C方法 
                public void A() 
                { 
                    Thread thread = new Thread(C); 
                    thread.IsBackground = true
                    thread.Start(); 
                    
     
                } 
     
            } 
     
     
     
            private void buttonB_Click(object sender, EventArgs e) 
            { 
                myclass mc = new myclass(dataGridView1); 
                Thread thread = new Thread(mc.B); 
                thread.IsBackground = true
                thread.Start(); 
            } 
     
            private void buttonRefresh_Click(object sender, EventArgs e) 
            { 
                //解决方法A的问题,之后滚动条可以滚动了 
                dataGridView1.RightToLeft = RightToLeft.Yes; 
                dataGridView1.RightToLeft = RightToLeft.No; 
     
                //this.Refresh(); 没有作用 
                //dataGridView1.Refresh(); 没有作用 
            } 
     
            private void buttonE_Click(object sender, EventArgs e) 
            { 
                //E方法刚开始不死,一会就假死了 
                myclass mc = new myclass(dataGridView1); 
                Thread thread = new Thread(mc.E); 
                thread.IsBackground = true
                thread.Start(); 
            } 
     
            private void buttonC_Click(object sender, EventArgs e) 
            { 
                myclass mc = new myclass(dataGridView1); 
                Thread thread = new Thread(mc.C); 
                thread.IsBackground = true
                thread.Start(); 
            } 
     
            private void buttonD_Click(object sender, EventArgs e) 
            { 
                myclass mc = new myclass(dataGridView1); 
                Thread thread = new Thread(mc.D); 
                thread.IsBackground = true
                thread.Start(); 
            } 
     
            private void buttonA_Click(object sender, EventArgs e) 
            { 
                myclass mc = new myclass(dataGridView1); 
                mc.A(); 
     
                //或者 
     
                //myclass mc = new myclass(dataGridView1); 
                //Thread thread = new Thread( mc.A); 
                //thread.IsBackground = true; 
                //thread.Start(); 
      
            } 
     
           
        } 

     
    //除了E方法,其他方法UI都始终有响应,但是数据加载完成之后 有共同点问题,那就是滚动条可能没有,或者没有响应, 

    Form1.Designer.cs

    namespace WindowsApplication 

        partial class Form1 
        { 
            /// <summary> 
            /// 必需的设计器变量。 
            /// </summary> 
            private System.ComponentModel.IContainer components = null
     
            /// <summary> 
            /// 清理所有正在使用的资源。 
            /// </summary> 
            /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param> 
            protected override void Dispose(bool disposing) 
            { 
                if (disposing && (components != null)) 
                { 
                    components.Dispose(); 
                } 
                base.Dispose(disposing); 
            } 
     
            #region Windows 窗体设计器生成的代码 
     
            /// <summary> 
            /// 设计器支持所需的方法 - 不要 
            /// 使用代码编辑器修改此方法的内容。 
            /// </summary> 
            private void InitializeComponent() 
            { 
                this.dataGridView1 = new System.Windows.Forms.DataGridView(); 
                this.buttonA = new System.Windows.Forms.Button(); 
                this.buttonC = new System.Windows.Forms.Button(); 
                this.buttonD = new System.Windows.Forms.Button(); 
                this.buttonE = new System.Windows.Forms.Button(); 
                this.buttonRefresh = new System.Windows.Forms.Button(); 
                this.buttonB = new System.Windows.Forms.Button(); 
                ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); 
                this.SuspendLayout(); 
                //  
                // dataGridView1 
                //  
                this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; 
                this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Left; 
                this.dataGridView1.Location = new System.Drawing.Point(00); 
                this.dataGridView1.Name = "dataGridView1"
                this.dataGridView1.RowTemplate.Height = 23
                this.dataGridView1.Size = new System.Drawing.Size(635608); 
                this.dataGridView1.TabIndex = 0
                //  
                // buttonA 
                //  
                this.buttonA.Location = new System.Drawing.Point(686109); 
                this.buttonA.Name = "buttonA"
                this.buttonA.Size = new System.Drawing.Size(12039); 
                this.buttonA.TabIndex = 1
                this.buttonA.Text = "A"
                this.buttonA.UseVisualStyleBackColor = true
                this.buttonA.Click += new System.EventHandler(this.buttonA_Click); 
                //  
                // buttonC 
                //  
                this.buttonC.Location = new System.Drawing.Point(686181); 
                this.buttonC.Name = "buttonC"
                this.buttonC.Size = new System.Drawing.Size(12032); 
                this.buttonC.TabIndex = 2
                this.buttonC.Text = "C"
                this.buttonC.UseVisualStyleBackColor = true
                this.buttonC.Click += new System.EventHandler(this.buttonC_Click); 
                //  
                // buttonD 
                //  
                this.buttonD.Location = new System.Drawing.Point(686237); 
                this.buttonD.Name = "buttonD"
                this.buttonD.Size = new System.Drawing.Size(12036); 
                this.buttonD.TabIndex = 3
                this.buttonD.Text = "D"
                this.buttonD.UseVisualStyleBackColor = true
                this.buttonD.Click += new System.EventHandler(this.buttonD_Click); 
                //  
                // buttonE 
                //  
                this.buttonE.Location = new System.Drawing.Point(686302); 
                this.buttonE.Name = "buttonE"
                this.buttonE.Size = new System.Drawing.Size(12035); 
                this.buttonE.TabIndex = 4
                this.buttonE.Text = "E"
                this.buttonE.UseVisualStyleBackColor = true
                this.buttonE.Click += new System.EventHandler(this.buttonE_Click); 
                //  
                // buttonRefresh 
                //  
                this.buttonRefresh.Location = new System.Drawing.Point(686438); 
                this.buttonRefresh.Name = "buttonRefresh"
                this.buttonRefresh.Size = new System.Drawing.Size(12039); 
                this.buttonRefresh.TabIndex = 6
                this.buttonRefresh.Text = "界面刷新"; 
                this.buttonRefresh.UseVisualStyleBackColor = true
                this.buttonRefresh.Click += new System.EventHandler(this.buttonRefresh_Click); 
                //  
                // buttonB 
                //  
                this.buttonB.Location = new System.Drawing.Point(686361); 
                this.buttonB.Name = "buttonB"
                this.buttonB.Size = new System.Drawing.Size(12034); 
                this.buttonB.TabIndex = 7
                this.buttonB.Text = "B"
                this.buttonB.UseVisualStyleBackColor = true
                this.buttonB.Click += new System.EventHandler(this.buttonB_Click); 
                //  
                // Form1 
                //  
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); 
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
                this.ClientSize = new System.Drawing.Size(961608); 
                this.Controls.Add(this.buttonB); 
                this.Controls.Add(this.buttonRefresh); 
                this.Controls.Add(this.buttonE); 
                this.Controls.Add(this.buttonD); 
                this.Controls.Add(this.buttonC); 
                this.Controls.Add(this.buttonA); 
                this.Controls.Add(this.dataGridView1); 
                this.Name = "Form1"
                this.Text = "Form1"
                ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); 
                this.ResumeLayout(false); 
     
            } 
     
            #endregion 
     
            private System.Windows.Forms.DataGridView dataGridView1; 
            private System.Windows.Forms.Button buttonA; 
            private System.Windows.Forms.Button buttonC; 
            private System.Windows.Forms.Button buttonD; 
            private System.Windows.Forms.Button buttonE; 
            private System.Windows.Forms.Button buttonRefresh; 
            private System.Windows.Forms.Button buttonB; 
        } 

    sql.cs

        using System; 
        using System.Collections; 
        using System.Collections.Specialized; 
        using System.Data; 
        using System.Data.SqlClient; 
        using System.Configuration; 
     
        namespace  SQLServerDAL //可以修改成实际项目的命名空间名称 
        { 
         /**//// <summary> 
         /// Copyright (C) 2010 qanholas  
         /// 数据访问基础类(基于SQLServer) 
         /// 用户可以修改满足自己项目的需要。 
         /// </summary> 
         public abstract class DbHelperSQL 
         { 
          //数据库连接字符串(web.config来配置) 
          //<add key="ConnectionString" value="server=127.0.0.1;database=DATABASE;uid=sa;pwd=" />   
             protected static string connectionString = @"Data Source=.\sql2005;Initial Catalog=ycmis;User Id=sa;Password=123456"
          public DbHelperSQL() 
          {    
          } 
        #region 公用方法 
     
          public static int GetMaxID(string FieldName,string TableName) 
          { 
           string strsql = "select max(" + FieldName + ")+1 from " + TableName; 
           object obj = GetSingle(strsql); 
           if (obj == null
           { 
            return 1
           } 
           else 
           { 
            return int.Parse(obj.ToString()); 
           } 
          } 
          public static bool Exists(string strSql, params SqlParameter[] cmdParms) 
          { 
           object obj = GetSingle(strSql, cmdParms); 
           int cmdresult; 
           if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) 
           { 
            cmdresult = 0
           } 
           else 
           { 
            cmdresult = int.Parse(obj.ToString()); 
           } 
           if (cmdresult == 0
           { 
            return false
           } 
           else 
           { 
            return true
           } 
          } 
          #endregion 
     
     
     
          /**//// <summary> 
          /// 执行SQL语句,返回影响的记录数 
          /// </summary> 
          /// <param name="SQLString">SQL语句</param> 
          /// <returns>影响的记录数</returns> 
          public static int ExecuteSql(string SQLString) 
          { 
           using (SqlConnection connection = new SqlConnection(connectionString)) 
           {     
            using (SqlCommand cmd = new SqlCommand(SQLString,connection)) 
            { 
             try 
             {   
              connection.Open(); 
              int rows=cmd.ExecuteNonQuery(); 
              return rows; 
             } 
             catch(System.Data.SqlClient.SqlException E) 
             {      
              connection.Close(); 
              throw new Exception(E.Message); 
             } 
            }     
           } 
          } 
           
          /**//// <summary> 
          /// 执行多条SQL语句,实现数据库事务。 
          /// </summary> 
          /// <param name="SQLStringList">多条SQL语句</param>   
          public static void ExecuteSqlTran(ArrayList SQLStringList) 
          { 
           using (SqlConnection conn = new SqlConnection(connectionString)) 
           { 
            conn.Open(); 
            SqlCommand cmd = new SqlCommand(); 
            cmd.Connection=conn;     
            SqlTransaction tx=conn.BeginTransaction();    
            cmd.Transaction=tx;     
            try 
            {      
             for(int n=0;n<SQLStringList.Count;n++) 
             { 
              string strsql=SQLStringList[n].ToString(); 
              if (strsql.Trim().Length>1
              { 
               cmd.CommandText=strsql; 
               cmd.ExecuteNonQuery(); 
              } 
             }           
             tx.Commit();      
            } 
            catch(System.Data.SqlClient.SqlException E) 
            {   
             tx.Rollback(); 
             throw new Exception(E.Message); 
            } 
           } 
          } 
          /**//// <summary> 
          /// 执行带一个存储过程参数的的SQL语句。 
          /// </summary> 
          /// <param name="SQLString">SQL语句</param> 
          /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param> 
          /// <returns>影响的记录数</returns> 
          public static int ExecuteSql(string SQLString,string content) 
          {     
           using (SqlConnection connection = new SqlConnection(connectionString)) 
           { 
            SqlCommand cmd = new SqlCommand(SQLString,connection);   
            System.Data.SqlClient.SqlParameter  myParameter = new System.Data.SqlClient.SqlParameter ( "@content", SqlDbType.NText); 
            myParameter.Value = content ; 
            cmd.Parameters.Add(myParameter); 
            try 
            { 
             connection.Open(); 
             int rows=cmd.ExecuteNonQuery(); 
             return rows; 
            } 
            catch(System.Data.SqlClient.SqlException E) 
            {     
             throw new Exception(E.Message); 
            } 
            finally 
            { 
             cmd.Dispose(); 
             connection.Close(); 
            }  
           } 
          }   
          /**//// <summary> 
          /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例) 
          /// </summary> 
          /// <param name="strSQL">SQL语句</param> 
          /// <param name="fs">图像字节,数据库的字段类型为image的情况</param> 
          /// <returns>影响的记录数</returns> 
          public static int ExecuteSqlInsertImg(string strSQL,byte[] fs) 
          {   
           using (SqlConnection connection = new SqlConnection(connectionString)) 
           { 
            SqlCommand cmd = new SqlCommand(strSQL,connection);  
            System.Data.SqlClient.SqlParameter  myParameter = new System.Data.SqlClient.SqlParameter ( "@fs", SqlDbType.Image); 
            myParameter.Value = fs ; 
            cmd.Parameters.Add(myParameter); 
            try 
            { 
             connection.Open(); 
             int rows=cmd.ExecuteNonQuery(); 
             return rows; 
            } 
            catch(System.Data.SqlClient.SqlException E) 
            {     
             throw new Exception(E.Message); 
            } 
            finally 
            { 
             cmd.Dispose(); 
             connection.Close(); 
            }     
           } 
          } 
           
          /**//// <summary> 
          /// 执行一条计算查询结果语句,返回查询结果(object)。 
          /// </summary> 
          /// <param name="SQLString">计算查询结果语句</param> 
          /// <returns>查询结果(object)</returns> 
          public static object GetSingle(string SQLString) 
          { 
           using (SqlConnection connection = new SqlConnection(connectionString)) 
           { 
            using(SqlCommand cmd = new SqlCommand(SQLString,connection)) 
            { 
             try 
             { 
              connection.Open(); 
              object obj = cmd.ExecuteScalar(); 
              if((Object.Equals(obj,null))||(Object.Equals(obj,System.DBNull.Value))) 
              {      
               return null
              } 
              else 
              { 
               return obj; 
              }     
             } 
             catch(System.Data.SqlClient.SqlException e) 
             {       
              connection.Close(); 
              throw new Exception(e.Message); 
             }  
            } 
           } 
          } 
          /**//// <summary> 
          /// 执行查询语句,返回SqlDataReader 
          /// </summary> 
          /// <param name="strSQL">查询语句</param> 
          /// <returns>SqlDataReader</returns> 
          public static SqlDataReader ExecuteReader(string strSQL) 
          { 
           SqlConnection connection = new SqlConnection(connectionString);    
           SqlCommand cmd = new SqlCommand(strSQL,connection);     
           try 
           { 
            connection.Open();  
            SqlDataReader myReader = cmd.ExecuteReader(); 
            return myReader; 
           } 
           catch(System.Data.SqlClient.SqlException e) 
           {         
            throw new Exception(e.Message); 
           }    
            
          }   
          /**//// <summary> 
          /// 执行查询语句,返回DataSet 
          /// </summary> 
          /// <param name="SQLString">查询语句</param> 
          /// <returns>DataSet</returns> 
          public static DataSet Query(string SQLString) 
          { 
           using (SqlConnection connection = new SqlConnection(connectionString)) 
           { 
            DataSet ds = new DataSet(); 
            try 
            { 
             connection.Open(); 
             SqlDataAdapter command = new SqlDataAdapter(SQLString,connection);     
             command.Fill(ds,"ds"); 
            } 
            catch(System.Data.SqlClient.SqlException ex) 
            {     
             throw new Exception(ex.Message); 
            }    
            return ds; 
           }    
          } 
     
     
     
     
          /**//// <summary> 
          /// 执行SQL语句,返回影响的记录数 
          /// </summary> 
          /// <param name="SQLString">SQL语句</param> 
          /// <returns>影响的记录数</returns> 
          public static int ExecuteSql(string SQLString,params SqlParameter[] cmdParms) 
          { 
           using (SqlConnection connection = new SqlConnection(connectionString)) 
           {     
            using (SqlCommand cmd = new SqlCommand()) 
            { 
             try 
             {   
              PrepareCommand(cmd, connection, null,SQLString, cmdParms); 
              int rows=cmd.ExecuteNonQuery(); 
              cmd.Parameters.Clear(); 
              return rows; 
             } 
             catch(System.Data.SqlClient.SqlException E) 
             {     
              throw new Exception(E.Message); 
             } 
            }     
           } 
          } 
           
            
          /**//// <summary> 
          /// 执行多条SQL语句,实现数据库事务。 
          /// </summary> 
          /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param> 
          public static void ExecuteSqlTran(Hashtable SQLStringList) 
          {    
           using (SqlConnection conn = new SqlConnection(connectionString)) 
           { 
            conn.Open(); 
            using (SqlTransaction trans = conn.BeginTransaction())  
            { 
             SqlCommand cmd = new SqlCommand(); 
             try  
             { 
              //循环 
              foreach (DictionaryEntry myDE in SQLStringList) 
              {  
               string  cmdText=myDE.Key.ToString(); 
               SqlParameter[] cmdParms=(SqlParameter[])myDE.Value; 
               PrepareCommand(cmd,conn,trans,cmdText, cmdParms); 
               int val = cmd.ExecuteNonQuery(); 
               cmd.Parameters.Clear(); 
     
               trans.Commit(); 
              }      
             } 
             catch  
             { 
              trans.Rollback(); 
              throw
             } 
            }     
           } 
          } 
          
             
          /**//// <summary> 
          /// 执行一条计算查询结果语句,返回查询结果(object)。 
          /// </summary> 
          /// <param name="SQLString">计算查询结果语句</param> 
          /// <returns>查询结果(object)</returns> 
          public static object GetSingle(string SQLString,params SqlParameter[] cmdParms) 
          { 
           using (SqlConnection connection = new SqlConnection(connectionString)) 
           { 
            using (SqlCommand cmd = new SqlCommand()) 
            { 
             try 
             { 
              PrepareCommand(cmd, connection, null,SQLString, cmdParms); 
              object obj = cmd.ExecuteScalar(); 
              cmd.Parameters.Clear(); 
              if((Object.Equals(obj,null))||(Object.Equals(obj,System.DBNull.Value))) 
              {      
               return null
              } 
              else 
              { 
               return obj; 
              }     
             } 
             catch(System.Data.SqlClient.SqlException e) 
             {     
              throw new Exception(e.Message); 
             }      
            } 
           } 
          } 
           
          /**//// <summary> 
          /// 执行查询语句,返回SqlDataReader 
          /// </summary> 
          /// <param name="strSQL">查询语句</param> 
          /// <returns>SqlDataReader</returns> 
          public static SqlDataReader ExecuteReader(string SQLString,params SqlParameter[] cmdParms) 
          {   
           SqlConnection connection = new SqlConnection(connectionString); 
           SqlCommand cmd = new SqlCommand();     
           try 
           { 
            PrepareCommand(cmd, connection, null,SQLString, cmdParms); 
            SqlDataReader myReader = cmd.ExecuteReader(); 
            cmd.Parameters.Clear(); 
            return myReader; 
           } 
           catch(System.Data.SqlClient.SqlException e) 
           {         
            throw new Exception(e.Message); 
           }      
            
          }   
           
          /**//// <summary> 
          /// 执行查询语句,返回DataSet 
          /// </summary> 
          /// <param name="SQLString">查询语句</param> 
          /// <returns>DataSet</returns> 
          public static DataSet Query(string SQLString,params SqlParameter[] cmdParms) 
          { 
           using (SqlConnection connection = new SqlConnection(connectionString)) 
           { 
            SqlCommand cmd = new SqlCommand(); 
            PrepareCommand(cmd, connection, null,SQLString, cmdParms); 
            using( SqlDataAdapter da = new SqlDataAdapter(cmd) ) 
            { 
             DataSet ds = new DataSet();  
             try 
             {             
              da.Fill(ds,"ds"); 
              cmd.Parameters.Clear(); 
             } 
             catch(System.Data.SqlClient.SqlException ex) 
             {     
              throw new Exception(ex.Message); 
             }    
             return ds; 
            }     
           }    
          } 
     
     
          private static void PrepareCommand(SqlCommand cmd,SqlConnection conn,SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)  
          { 
           if (conn.State != ConnectionState.Open) 
            conn.Open(); 
           cmd.Connection = conn; 
           cmd.CommandText = cmdText; 
           if (trans != null
            cmd.Transaction = trans; 
           cmd.CommandType = CommandType.Text;//cmdType; 
           if (cmdParms != null)  
           { 
            foreach (SqlParameter parm in cmdParms) 
             cmd.Parameters.Add(parm); 
           } 
          } 
     
     
     
          /**//// <summary> 
          /// 执行存储过程 
          /// </summary> 
          /// <param name="storedProcName">存储过程名</param> 
          /// <param name="parameters">存储过程参数</param> 
          /// <returns>SqlDataReader</returns> 
          public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters ) 
          { 
           SqlConnection connection = new SqlConnection(connectionString); 
           SqlDataReader returnReader; 
           connection.Open(); 
           SqlCommand command = BuildQueryCommand( connection,storedProcName, parameters ); 
           command.CommandType = CommandType.StoredProcedure; 
           returnReader = command.ExecuteReader();     
           return returnReader;    
          } 
           
           
          /**//// <summary> 
          /// 执行存储过程 
          /// </summary> 
          /// <param name="storedProcName">存储过程名</param> 
          /// <param name="parameters">存储过程参数</param> 
          /// <param name="tableName">DataSet结果中的表名</param> 
          /// <returns>DataSet</returns> 
          public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName ) 
          { 
           using (SqlConnection connection = new SqlConnection(connectionString)) 
           { 
            DataSet dataSet = new DataSet(); 
            connection.Open(); 
            SqlDataAdapter sqlDA = new SqlDataAdapter(); 
            sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters ); 
            sqlDA.Fill( dataSet, tableName ); 
            connection.Close(); 
            return dataSet; 
           } 
          } 
     
           
          /**//// <summary> 
          /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值) 
          /// </summary> 
          /// <param name="connection">数据库连接</param> 
          /// <param name="storedProcName">存储过程名</param> 
          /// <param name="parameters">存储过程参数</param> 
          /// <returns>SqlCommand</returns> 
          private static SqlCommand BuildQueryCommand(SqlConnection connection,string storedProcName, IDataParameter[] parameters) 
          {    
           SqlCommand command = new SqlCommand( storedProcName, connection ); 
           command.CommandType = CommandType.StoredProcedure; 
           foreach (SqlParameter parameter in parameters) 
           { 
            command.Parameters.Add( parameter ); 
           } 
           return command;    
          } 
           
          /**//// <summary> 
          /// 执行存储过程,返回影响的行数   
          /// </summary> 
          /// <param name="storedProcName">存储过程名</param> 
          /// <param name="parameters">存储过程参数</param> 
          /// <param name="rowsAffected">影响的行数</param> 
          /// <returns></returns> 
          public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected ) 
          { 
           using (SqlConnection connection = new SqlConnection(connectionString)) 
           { 
            int result; 
            connection.Open(); 
            SqlCommand command = BuildIntCommand(connection,storedProcName, parameters ); 
            rowsAffected = command.ExecuteNonQuery(); 
            result = (int)command.Parameters["ReturnValue"].Value; 
            //Connection.Close(); 
            return result; 
           } 
          } 
           
          /**//// <summary> 
          /// 创建 SqlCommand 对象实例(用来返回一个整数值)  
          /// </summary> 
          /// <param name="storedProcName">存储过程名</param> 
          /// <param name="parameters">存储过程参数</param> 
          /// <returns>SqlCommand 对象实例</returns> 
          private static SqlCommand BuildIntCommand(SqlConnection connection,string storedProcName, IDataParameter[] parameters) 
          { 
           SqlCommand command = BuildQueryCommand(connection,storedProcName, parameters ); 
           command.Parameters.Add( new SqlParameter ( "ReturnValue"
            SqlDbType.Int,4,ParameterDirection.ReturnValue, 
            false,0,0,string.Empty,DataRowVersion.Default,null )); 
           return command; 
          } 
     
         } 
        } 
  • 相关阅读:
    LeetCode "Palindrome Partition II"
    LeetCode "Longest Substring Without Repeating Characters"
    LeetCode "Wildcard Matching"
    LeetCode "Best Time to Buy and Sell Stock II"
    LeetCodeEPI "Best Time to Buy and Sell Stock"
    LeetCode "Substring with Concatenation of All Words"
    LeetCode "Word Break II"
    LeetCode "Word Break"
    Some thoughts..
    LeetCode "Longest Valid Parentheses"
  • 原文地址:https://www.cnblogs.com/qanholas/p/1913084.html
Copyright © 2011-2022 走看看