一、增加新的SQL语句
1、设计器的Adapter中点右键,选择“添加查询”→“使用SQL语句”,就可以添加多种类型的SQL语句。如果是“SELECT(返回行)”则SQL语句的列必须是对应DataSet类的父集合,生成两个方法:FillBy*和GetBy*,方法名根据查询语句的意义定,比如FillByAge,FillBy是将结果填充到现有DataSet,GetBy是将结果以DataSet方式返回,建议两个都生成,方便以后用。看看默认生成的GetData就明白了。
2、GetDataById、IncAge
3、“SELECT(返回单个值)”就是ExecuteScalar
4、对于增加的SQL语句在代码中是以方法的形式使用的。方法的参数类型、顺序就是VS猜测的,如果不正确或者需要调整只要选中对应的语句,然后在【属性】窗口中修改Parameters属性即可。
5、增加新的SQL语句本质论,探寻源码:不能并发调用。
6、像使用普通类的方法一样使用Adapter。SQL语句不用再写在界面代码中。这就是一种数据访问层(DAL:Data Access Layer)。
二、TypedDataSet练习
7、用类型化DataSet重写登录、数据导入、手机号码归属地查询、省市选择等程序。
8、补充问题:
- 看mdf中数据没有改变?把那段代码放到Main中。
- 登录错误三次被锁定的问题,输入对了也不让登陆,这是错误码?就应该如此,防止暴力破解。
- 执行UpdateQuery以后本地DataSet并没有更新。
三、强类型DataSet其他
9、通过查看生成的源代码的值,生成的强类型TableAdapter默认每次调用方法都是打开连接、执行、关闭连接,而如果操作之前连接已经打开则不会自动帮我们连接、关闭,因此如果想批量操作提高效率可以操作之前先自己Open,操作完毕再Close。经测试:插入三千条数据,不优化用了45秒,优化后只用一两秒。回答面试问题:如何优化访问数据库的效率。
adapter.Connection.Open();
for (int i = 0; i < 3000; i++)
{
adapter.Insert(i.ToString(), i.ToString(), 0);
}
adapter.Connection.Close();
10、常见错误:DataSet ds = new DataSet();ds = GetData();变量名和对象。