博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第五节 21类型化DataSet
阅读量:6221 次
发布时间:2019-06-21

本文共 4791 字,大约阅读时间需要 15 分钟。

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using _21类型化DataSet_2.DataSet1TableAdapters;using System.Data.SqlClient;/* 弱类型DataSet的缺点 * 只能通过列名引用,dataset.Table[0].Rows[0]["age"],如果写错了列名编译时不会发现错误,因此开发时必须要记首列名 * int age = Convert.Toint32(dataset.Rows[0]["age"]),取到的字段的值是object类型,必须小心翼翼的进行类型转换,不仅麻烦,而且容易出错 * 将DataSet传递给其他使用者,使用者很难识别出有哪些些列可以供使用 *  * 运行时才能知道所有列名,数据绑定麻烦,无法使用Winform. ASP.Net的快速开发功能 *  * 自己动手写强类型DataSet(类型化DataSet,TypedDataSet),创建继承自DataSet的PersonDataSet类,封装出int? Age等属性和bool IsAgeNull等方法,向PersonDataSet中填充 *  * VS自动生成强类型DataSet *  * 添加->新建项->数据集 *  * 将表从服务器资源管理器拖放到DataSet中,注意拖放过程是自动根据表结构生成强类型dataSet类型,没有把数据也拖过来,程序还连的那个数据库,自动将数据库连接字符串写在了App.Config中 *  * 代码中使用DataSet示例: CC_RecordTableAdapter adapter = new CC_RecotdTableAdapter(); * 如何得知Adapter的类名? 选中DataSet中下半部分的Adapter,Name属性就是类名,需要右键点周类名->解析 *  * 取得所有数据: adapter.GetData(), 例子程序: 历显示所有数据,i
使用SQL语句,就可以添别致多种类型的SQL语句,如果是"select(返回行)" * 则SQL语句的列必须是对应的dataset类的父集合,生成两个方法:FillBy*和getBy*,方法名根据查询语句的意义定,比如FillByAge,FillBy是将结果填充到现有DataSet * GetBy是将结果以DataSet方式返回,建议两个都生成,方便以后,看看默认生成的GetData就明白了 * * GetDataByld, incAge * Select(返回单个值)就是ExecuteScalar * * 对于增加的Sql语句在代码中是以方法的形式使用的,方法的参数类型,顺序就是VS猜测的,如果不正确或者需要调整只要选中对应的语句,然后[属性]窗口中此伏彼起改parameters属性即可 * * 添加新的SQL语句本质论,探索寻源码,不能并发调用 * * 像使用普通类的方法一样使用Adapter,SQL语句不用再写在界面代码中,这就是一种类据访问层 DAL data Access Layer */namespace _21类型化DataSet_2{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { T_UserTableAdapter adapter = new T_UserTableAdapter(); _21类型化DataSet_2.DataSet1.T_UserDataTable user = adapter.GetData(); for (int i = 0; i < user.Count; i++) { _21类型化DataSet_2.DataSet1.T_UserRow us = user[i]; string msg = string.Format("姓名{0},年龄{1}",us.name, us.age); MessageBox.Show(msg); } //更新Dataset //user[0].name = "aaa"; //adapter.Update(user); //查入数据 //adapter.Insert("小向",44);//好像这里并没有进数据库 //SqlCommandBuilder builder = new SqlCommandBuilder(adapter); //adapter.Update(user); //adapter.Delete( } //引用一下类中的类 private void button2_Click(object sender, EventArgs e) { Class1.User user = new Class1.User(); user.age = 11; user.name = "小向"; string msg = string.Format("姓名:{0},年龄:{1}",user.name,user.age); MessageBox.Show(msg); } private void button3_Click(object sender, EventArgs e) { T_UserTableAdapter adapter = new T_UserTableAdapter(); _21类型化DataSet_2.DataSet1.T_UserDataTable user = adapter.GetData(); _21类型化DataSet_2.DataSet1.T_UserRow p = user[0]; //MessageBox.Show(p.name); //如果name的值为空,会报异常 if (p.IsnameNull()) { MessageBox.Show("姓名为空"); } else { MessageBox.Show(p.name); } } private void button4_Click(object sender, EventArgs e) { T_UserTableAdapter adapter = new T_UserTableAdapter(); int? age = adapter.GetByAge(); MessageBox.Show(Convert.ToString(age)); } private void tb_login_Click(object sender, EventArgs e) { string username = tb_username.Text; string passwrd = tb_password.Text; if (username != "" && passwrd != "") { T_LoginTableAdapter adapter = new T_LoginTableAdapter(); _21类型化DataSet_2.DataSet1.T_LoginDataTable logins = adapter._GetByUserName(username); if (logins.Count <= 0) { MessageBox.Show("用户名错误"); } else { _21类型化DataSet_2.DataSet1.T_LoginRow row = logins[0]; if (row.errortimes >= 3) { MessageBox.Show("用户被锁定!"); } else { if (row.password == passwrd) { MessageBox.Show("登陆成功!"); adapter.UpdateErrorTimesByUidzeor(row.id); } else { MessageBox.Show("登陆失败!"); adapter.UpdateErrorTimesByUid(row.id); } } } } else { MessageBox.Show("用户名不能为空!"); } } }}

  

转载地址:http://txrja.baihongyu.com/

你可能感兴趣的文章
HK&&CC JS学习:第一周——NO.2this
查看>>
《Android深度探索》(卷1)HAL与驱动开发 第二章心得体会
查看>>
请借助Array内置对象的相关方法,实现字符串倒序排列
查看>>
第一篇:GCD多线程的概念
查看>>
【转】jQuery获取Select选择的Text和 Value
查看>>
版本控制-git(二)
查看>>
char、varchar、nchar、nvarchar的区别
查看>>
解析函数论 Page 8 $f(x)$在$x_0$处解析的充要条件
查看>>
利用离散 Fourier 变换解一元二次方程
查看>>
2018软工实践第五次作业
查看>>
深入理解 hashcode 和 hash 算法
查看>>
java底层深入开发教程
查看>>
如何写javascript代码隐藏和显示这个div
查看>>
并发系列5-大白话聊聊Java并发面试问题之微服务注册中心的读写锁优化【石杉的架构笔记】...
查看>>
jQuery插件开发
查看>>
计算机图形学(OpenGL版)-第一个OpenGL程序
查看>>
Linux安装JDK和Tomcat
查看>>
NO.2: 尽量以const,enum,inline 替换 #define
查看>>
动态表单 - 加载与关闭
查看>>
gentoo
查看>>