SqlCommandBuilder类是如何构建T-Sql语句
2018-06-23 23:49:30来源:未知 阅读 ()
本篇博客默认你看了【DataTable中AcceptChanges()方法的DataRowRowState属性】这篇博客。
在使用SqlCommandBuilder很简单,就是创建一个SqlCommandBuilder对象,然后设置它的DataAdapter属性即可,但实际上,SqlCommandBuilder对象为我们做了很多事,也就是构建T-Sql命令,使我们的数据库能够与我们的操作同步,在调用SqlDataAdapter实例的Update()方法时,SqlCommandBuilder实例会遍历我们曾经修改或增加行,根据行的RowState这个标志位,构建不同的T-Sql命令。
下面我们就来看下,SqlCommandBuilder实例到底构建了哪些Sql命令:
老规矩代码上来先
--建库建表 create database student; use student; create table student( sname varchar(10) not null, sno int not null, sage int not null, ssex varchar(2) not null ); alter table student add constraint PK_sno primary key (sno), constraint CK_ssex check(ssex = '男' or ssex = '女'), constraint CK_sage check(sage > 8 and sage < 40) insert into student values('张三', 103, 23, '男'); insert into student values('李四', 104, 24, '男'); insert into student values('王五', 105, 25, '男'); insert into student values('赵六', 106, 26, '男'); insert into student values('朱七', 107, 27, '男'); select * from student; delete student;
C#代码:
public static void AdapterAndSqlCommand() { //第一步:获取数据库配置信息 String connStr = ConfigurationManager.ConnectionStrings["connStr"].ToString(); //第二步:构建SqlCommand查询语句 SqlCommand command = new SqlCommand("select * from student;"); command.Connection = new SqlConnection(connStr); //第三步:创建SqlDataAdapter SqlDataAdapter adapter = new SqlDataAdapter(command); //第四步:创建DataSet和DataTable DataSet dataSet = new DataSet(); DataTable dataTable = new DataTable(); //第五步:填充数据 adapter.Fill(dataTable); dataSet.Tables.Add(dataTable); //修改第一行数据中的姓名为小红,并将其性别改为女 dataTable.Rows[0]["sname"] = "小红"; dataTable.Rows[0]["ssex"] = "女"; //删除第二行数据 dataTable.Rows[1].Delete(); //构建一个新的行,并添加到表中去 dataTable.Rows.Add(new object[] {"小明", 108, 18, "男" }); //创建SqlCommandBuilder对象,并绑定一个SqlDataAdapter对象 SqlCommandBuilder scb = new SqlCommandBuilder(adapter); //打印输出SqlCommandBuilder对象的增删改sql命令语句 Console.WriteLine("SqlCommandBuilder实例的Insert命令: " + scb.GetInsertCommand().CommandText); Console.WriteLine("SqlCommandBuilder实例的Delete命令: " + scb.GetDeleteCommand().CommandText); Console.WriteLine("SqlCommandBuilder实例的Update命令: " + scb.GetUpdateCommand().CommandText); //将有变动的行同步到数据库中 adapter.Update(dataTable.GetChanges()); //保存修改 dataTable.AcceptChanges(); //下面是一个遍历输出datatable中的数据 foreach (DataTable table in dataSet.Tables) { foreach(DataRow row in table.Rows) { Console.WriteLine(row[0] + ", " + row[1] + ", " + row[2] + ", " + row[3]); } } }
运行打印输出的结果如下:内存中数据变化符合预期
数据库中呢?查看下:
也是正常的,已经同步到了数据库中。修改了一个,删除了一个,新增了一个。
但是我们看那个控制台打印的sql命令,命令是对着的,但怎么还有局部变量,这些局部变量又是什么时候替换的呢?
未完待续====================================
我也不知道是什么时候替换的【这个是笑哭的表情,可惜这里没有这个表情】。。
【点击此处回到主页】
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:动态加载内嵌类库文件的方法
- 如果是自学WEB前端的话,该如何才能找到一份7K实习生工作呢 2020-06-04
- 前端如何学习? 2020-06-04
- 如何成为一名优秀的web前端工程师 2020-06-02
- 零基础小白转行如何入门学习web前端 2020-06-01
- 如何在博客园添加自己的头像 2020-05-27
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash