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']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值