西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴(lài)的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)西西教程數(shù)據(jù)庫(kù)教程 → SQL Server中使用表類(lèi)型參數(shù)批量添加和修改的存儲(chǔ)過(guò)程

SQL Server中使用表類(lèi)型參數(shù)批量添加和修改的存儲(chǔ)過(guò)程

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2012/10/30 11:00:05字體大。A-A+

作者:西西點(diǎn)擊:266次評(píng)論:15次標(biāo)簽: 存儲(chǔ)過(guò)程

摘要:

    最近做項(xiàng)目中遇到批量添加和修改的問(wèn)題,在老大的指導(dǎo)下學(xué)會(huì)了使用表類(lèi)型參數(shù)來(lái)做批量操作。為了鞏固強(qiáng)化,圍繞這個(gè)技術(shù)又做了個(gè)小demo。

開(kāi)始正題:   

    首先,我們?cè)赟QL Server 2008下創(chuàng)建一個(gè)示例數(shù)據(jù)庫(kù)名為T(mén)ableTypeTest,再在該數(shù)據(jù)庫(kù)下創(chuàng)建一個(gè)名為Class和Student的表,結(jié)構(gòu)如下:

              

再在TableTypeTest數(shù)據(jù)庫(kù)下創(chuàng)建一個(gè)自定義表類(lèi)型,取名StudentType,如下:

CREATE TYPE [dbo].[StudentType] AS TABLE(
    [SID] [int] NOT NULL,
    [CID] [int] NOT NULL,
    [SName] [nvarchar](50) NOT NULL
)
GO

然后,創(chuàng)建兩個(gè)存儲(chǔ)過(guò)程,批量添加和批量修改,分別為InserNewStudent和UpdateStudent,如下

InserNewStudent:

CREATE PROCEDURE [dbo].[InserNewStudent] 
    @Dt dbo.StudentType readonly
AS
BEGIN
    insert into dbo.Student(CID,SName) select t.CID,t.SName  from @Dt as t 
END
GO

UpdateStudent:

啟動(dòng)Visual Studio 2010,創(chuàng)建一個(gè)默認(rèn)的窗體應(yīng)用程序,窗體用于顯示所有班級(jí)列表,操作每個(gè)班級(jí)下的學(xué)生通過(guò)選中該班級(jí),然后右鍵操作。如下:

創(chuàng)建顯示班級(jí)下的所有學(xué)生列表窗體,如下:

創(chuàng)建批量添加學(xué)生的窗體,如下:

關(guān)鍵代碼如下:

/// <summary>
         /// 批量添加
         /// </summary>
         public static bool AddBantch(DataTable dt) {
             string pName = "dbo.InserNewStudent";
             List<SqlParameter> pList = new List<SqlParameter>() {
             DbHelper.CreateSqlParemeterStructured("@Dt",dt)
             };
             try
             {
                 DbHelper.RunProcedure(pName, pList);
                 return true;
             }
             catch
             {
                 return false;
             }
         }

private void button1_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(this.textBox1.Text) || string.IsNullOrEmpty(this.textBox4.Text) || string.IsNullOrEmpty(this.textBox6.Text))
            {
                MessageBox.Show("不能有空文本框");
            }
            else {
                DataTable dt = new DataTable();
                dt.Columns.Add("SID");
                dt.Columns.Add("CID");
                dt.Columns.Add("SName");
                DataRow dr;
                dr = dt.NewRow();
                dr["SID"] = 0;//此列雖然在添加的時(shí)候無(wú)用,但必須賦值,否則報(bào)錯(cuò)
                dr["CID"] = CID;
                dr["SName"] = this.textBox1.Text;
                dt.Rows.Add(dr);
                dr = dt.NewRow();
                dr["SID"] = 0;
                dr["CID"] = CID;
                dr["SName"] = this.textBox4.Text;
                dt.Rows.Add(dr);
                dr = dt.NewRow();
                dr["SID"] = 0;
                dr["CID"] = CID;
                dr["SName"] = this.textBox6.Text;
                dt.Rows.Add(dr);

                if (Library.AddBantch(dt))
                {
                    MessageBox.Show("批量添加成功!");
                    this.Close();
                }
                else
                {
                    MessageBox.Show("批量添加失!");
                    this.Close();
                }
            }
        }

 創(chuàng)建批量更改班級(jí)學(xué)生姓名的窗體,如下:

關(guān)鍵代碼如下:

/// <summary>
         /// 批量修改
         /// </summary>
         public static bool UpdateBantch(DataTable dt) {
             string pName = "dbo.UpdateStudent";
             List<SqlParameter> pList = new List<SqlParameter>() { 
             DbHelper.CreateSqlParemeterStructured("@Dt",dt)
             };
             try
             {
                 DbHelper.RunProcedure(pName, pList);
                 return true;
             }
             catch 
             {
                 return false;
             }
         }

private void button1_Click(object sender, EventArgs e)
        {
            int rows = this.dataGridView1.Rows.Count;
            DataTable dt = new DataTable();
            dt.Columns.Add("SID");
            dt.Columns.Add("CID");
            dt.Columns.Add("SName");
            DataRow dr;
            for (int i = 0; i < rows;i++ ) {
            DataGridViewRow dtr=this.dataGridView1.Rows[i];
            dr = dt.NewRow();
            dr["SID"] = dtr.Cells[0].Value;
            dr["CID"] = dtr.Cells[1].Value;
            dr["SName"] = dtr.Cells[2].Value;
            dt.Rows.Add(dr);
            }
            if (Library.UpdateBantch(dt))
            {
                MessageBox.Show("批量更改成功!");
            }
            else {
                MessageBox.Show("批量更改失敗!");
            }
        }

源碼下載

PS:數(shù)據(jù)庫(kù)連接要在程序中的App.Config中配置

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(15)

    昵稱(chēng):
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)