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只能插入後
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']