C#一次連接數據庫執行多條sql語句(三種方法)

 

第一種方法:

            string str="server=.;uid=sa;pwd=111111;database=text_db";//連接字符串

            SqlConnection SCON = null;//連接對象

            SqlCommand SCom=new SqlCommand();//命令對象

            SCON=new SqlConnection(str);

            SCON.Open();

            SCom.CommandText = "insert into cum(nm,age,sex,addr) values(‘”+name1+”’, ‘”+age1+”’, ‘”+sex1”’,’”+addr1+”’); insert into cum(nm,age,sex,addr) values(‘”+name1+”’, ‘”+age1+”’, ‘”+sex1”’,’”+addr1+”’)";

            SCom.Connection = SCON;

            SCom.CommandType = CommandType.Text;

            int num = SCom.ExecuteNonQuery();

            SCON.Close();

            注意:這就是用分號隔開,把多條sql語句寫成了一條sql語句來執行,因爲沒有用參數,可能有sql注入風險。

第二種方法:

            string str="server=.;uid=sa;pwd=111111;database=text_db";//連接字符串

            SqlConnection SCON;

            SqlCommand SCom1=new SqlCommand();//要執行sql語句的第一個命令對象

            SqlCommand SCom2=new SqlCommand();//要執行sql語句的第二個命令對象

            SCON=new SqlConnection(str);

            SCON.Open();

            //第一條要執行的sql語句

            SCom1.CommandText = "insert into cum(nm,age,sex,addr) values(@name,@age,@sex,@addr)";

            SCom1.Parameters.Add("@name", SqlDbType.Text);

            SCom1.Parameters.Add("@age", SqlDbType.Int);

            SCom1.Parameters.Add("@sex", SqlDbType.Bit);

            SCom1.Parameters.Add("@addr", SqlDbType.Text);

            SCom1.Parameters["@name"].Value = name1;

            SCom1.Parameters["@age"].Value = age1;

            SCom1.Parameters["@sex"].Value = sex1;

            SCom1.Parameters["@addr"].Value = addr1;

            SCom1.Connection = SCON;

            SCom1.CommandType = CommandType.Text;

            int num = SCom1.ExecuteNonQuery();

            //第二條要執行行的sql語句

            SCom2.CommandText = "insert into cum(nm,age,sex,addr) values(@name,@age,@sex,@addr)";

            SCom2.Parameters.Add("@name", SqlDbType.Text);

            SCom2.Parameters.Add("@age", SqlDbType.Int);

            SCom2.Parameters.Add("@sex", SqlDbType.Bit);

            SCom2.Parameters.Add("@addr", SqlDbType.Text);

            SCom2.Parameters["@name"].Value = name2;

            SCom2.Parameters["@age"].Value = age2;

            SCom2.Parameters["@sex"].Value = sex2;

            SCom2.Parameters["@addr"].Value = addr2;

            SCom2.Connection = SCON;

            SCom2.CommandType = CommandType.Text;

            int num = SCom2.ExecuteNonQuery();

            SCON.Close();

            這種方法就是利用了一個SqlConnection對象進行一次連接,在關閉前執行多個SqlCommand命令對象,執行完後再關閉連接。

第三種方法:

       

        //這裏用事務來執行多條語句

        public string InsertAll(string[] cmdtext)
        {

            //打開連接
            Open();
            DbTransaction myTrans;
            DbCommand mycmd;
            if (IsAccess())
            {
                 mycmd =(OleDbCommand) Sqlcon.CreateCommand();
            }
            else
            {
                 mycmd =(SqlCommand) Sqlcon.CreateCommand();
            }

            myTrans = Sqlcon.BeginTransaction(IsolationLevel.ReadCommitted);
            mycmd.Connection = Sqlcon;
            mycmd.Transaction = myTrans;
            try
            {
                for (int i = 0; i < cmdtext.Length; i++)
                {
                    mycmd.CommandText = cmdtext[i];
                    mycmd.ExecuteNonQuery();
                }
                myTrans.Commit();
                return "1";
            }
            catch (Exception)
            {
                if (myTrans != null)
                    myTrans.Rollback();
                return "0";
            }
            finally
            {

                //關閉連接
                //Sqlcon.Close();
                if (Sqlcon != null)
                    Close();
            }
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章