1. 程式人生 > >SQL SERVER-UpdateRowSource 外帶簡單例子

SQL SERVER-UpdateRowSource 外帶簡單例子

UpdateRowSource是DbCommand的一個屬性,當DbCommand把本地變化更新到資料庫的時候,UpdateRowSource可能把資料庫的變化帶回本地。

用例子來說:
假設有一個數據庫叫做My,我們定義一個表叫做MyTable:

use MyTest;

create table MyTable
(
    id int identity(1,1) primary key,
    name nvarchar(32)
);

因為id是自增項,插入的時候必須留空,因此插入的時候只傳‘name’,不可以傳本地定義的id。id只能插入

用SCOPE_IDENTITY()獲得。這裡,UpdateRowSource就可以用來把資料庫的變化,比如id,更新到本地中來。

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp7
{
    class Program
    {
        static void Main(string[] args)
        {
            string connStr = "server=.;database=mytest;uid=sa;pwd=Server2012";
            using (SqlConnection con = new SqlConnection(connStr))
            {
                using (var sda = new SqlDataAdapter("select * from mytable", con))
                {
                    DataTable table = new DataTable();
                    sda.Fill(table);

                    sda.InsertCommand = new SqlCommand("insert into mytable(name) values(@name);select SCOPE_IDENTITY() as id", con);
                    sda.InsertCommand.Parameters.Add("@name", SqlDbType.NVarChar, 100, "name");
                    sda.InsertCommand.UpdatedRowSource = UpdateRowSource.FirstReturnedRecord;

                    table.Rows.Add(0, "extra person");
                    sda.Update(table);
                    foreach(DataRow row in table.Rows)
                    {
                        Console.WriteLine(row[0] + "\t" + row[1]);
                    }
                    Console.Read();

                }
            }

        }
    }
}

 

其中select SCOPE_IDENTITY() as id返回了一個記錄,而UpdateRowSource.FirstReturnedRecord把該紀錄寫回了本地的table。你可以看到[2, 'extra person']。

相形之下,如果改成sda.InsertCommand.UpdatedRowSource = System.Data.UpdateRowSource.None;
那麼,table中的第二條記錄就不會得到更新,還是[0, 'extra person']