ado.net中的DataSet使用
来源:互联网 发布:爱普生打印机清零软件 编辑:程序博客网 时间:2024/05/16 05:56
数据库简单自己建立
wpf中C#代码
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Shapes;using System.Data.SqlClient;using System.Data;namespace WPFDemo01{ /// <summary> /// ADOBasic.xaml 的交互逻辑 /// </summary> public partial class ADOBasic : Window { public ADOBasic() { InitializeComponent(); } private void btnLink_Click(object sender, RoutedEventArgs e) { //对实现了IDisposible接口的,使用using关键字,它能控制对资源的释放,具体的自行百度。语法是 //using(类型d = new (这里面指的是创建对象)......){.................}他可以自动回收资源,不用自己关闭数据库 //以后都这么写,conn.close();的方法前面程序挂掉了,那么数据库就没有关,这样时间久了会造成数据库泄露 //SqlConnection建立和数据库的连接 //1.第一种, //ExecuteNonQuery()通常用来执行Update,Delete,Insert语句,就如单词所示NonQuery,非查询! //using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=DemoDB;User ID=sa;Password=540469505")) //{ // conn.Open(); // MessageBox.Show("数据库连接成功!"); // //通过连接创建一个向数据库发命令(command)的对象 // using(SqlCommand cmd = conn.CreateCommand()) // { // //CommandText为要执行的sql语句 // cmd.CommandText = "insert into T_Students(id,name,age,aihao,height) values (101,'刘亦菲',23,'北京吧',170);"; // cmd.ExecuteNonQuery(); //开始执行 // } //} //2.第二种, //查询用ExecuteScalar()返回的是一行一列的值 //using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=DemoDB;User ID=sa;Password=540469505")) //{ // conn.Open(); // using(SqlCommand cmd = conn.CreateCommand()) // { // //例1: // //cmd.CommandText="select count(*) from T_Students"; // //ExecuteScalar()返回的是一行一列的值使用该类型,意思就是查询的结果只有一个, // //因为其返回的是object类型,所以根据我们返回的实际类型可以进行强制类型转换, // //这里一定要写对对应类型,比如数据库中的varchar类型对应C#中的是string, // //bigint类型对应的是long类型 // //int i =(int)cmd.ExecuteScalar(); // //MessageBox.Show("查询到结果数为:"+i+"条"); // //例2: // //cmd.CommandText = "select 'dafa'"; // //string s = (string)cmd.ExecuteScalar(); // //MessageBox.Show(s); // //例3: // //本数据库中自增长字段为addId,其值是数据库自动分配的, // //那么我们如何得知本数据的addId是多少呢? // cmd.CommandText = "insert into T_Students(id,name,age,aihao,height) output inserted.addId values (10000,'离死',102,'',80)"; // int i = (int)cmd.ExecuteScalar(); // MessageBox.Show("当前addId为:"+i); // } //} //3.第三种, //执行有多行结果的结果集用ExecuteReader,同样是实现IDisposible接口的 //SqlDataReader reader = cmd.ExecuteReader();..... //while(reader.Reader()) //{ //Console.writeLine(reader.GetString(1)); //}这里要和注意,该查询结果是放在数据库中的,没有放到 //客户端,初始指针指向第一条数据之前,每调用一次Reader指针 //下移一条,只要没有移到最后一条之后,就一直返回true //reader的GetString、GetInt32的方法只接受整数参数, //也就是序号,用GetOrdinal方法根据列名动态得到序号 using(SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=DemoDB;User ID=sa;Password=540469505")) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select * from T_Students;"; using (SqlDataReader reader = cmd.ExecuteReader()) { while(reader.Read()) { string name = reader.GetString(1); //根据数据库返回值类型写C#对应类型,这里面的参数表示返回该行的第几列 int age = reader.GetInt32(2); //这里的类型对应有点麻烦,要注意 MessageBox.Show("名字是:"+name+" "+"年龄是:"+age); } } } } MessageBox.Show("执行完成~!"); } private void btnSearch_Click(object sender, RoutedEventArgs e) { using(SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=DemoDB;User ID=sa;Password=540469505")) { conn.Open(); using(SqlCommand cmd = conn.CreateCommand()) { //此字符串拼接方法,如果这里输入“1' or '1'='1”,则会查出所有的结果,造成了SQL注入漏洞 //cmd.CommandText = "select * from T_Students where name = '"+txtPerson.Text+"'"; //@Name是占位符,表示我这里需要一个Name的值,这样看起来更有意义,但是name这个词可以换成其他的任意词 cmd.CommandText = "select * from T_Students where Name=@Name or Age=@Age"; //用法1: //cmd.Parameters.AddWithValue("@Name",txtPerson.Text); //用法2:推荐使用 cmd.Parameters.Add(new SqlParameter("@Name",txtPerson.Text)); //注意如果是别的类型的注意转换类型 cmd.Parameters.Add(new SqlParameter("@Age", Convert.ToInt32(txtPerson.Text))); //此语句也可以用在如下语句等 //insert into......values(@Name,@Age...) //delete ...... where ID=@idAdd //注意"@参数"不能用在替换表名、字段名、select之类的关键字等。 //如下都是不可以的! //select age from @TableName.. //select @AgeName from table... using(SqlDataReader reader = cmd.ExecuteReader()) { while(reader.Read()) { //GetInt32获得的是int类型 //GetInt64获得的是long类型(数据库中是bigint) int id = reader.GetInt32(0); string name = reader.GetString(1); int age = reader.GetInt32(2); string address = reader.GetString(3); int addId = reader.GetInt32(4); MessageBox.Show(id.ToString()+" "+name+" "+age.ToString()+" "+address+" "+addId.ToString()); } } } } } //4.第四种 //SqlDataReader是连接相关的,SqlDataReader中的查询结果并不是放到程序中, //而是放在数据库服务器中,SqlDataReader只是相当于放了一个指针(游标),只能 //读取当前游标指向的行,一旦连接断开就不能再读取。这样做的好处就是无论查询 //结果有多少条,对程序占用的内存都几乎没有影响。 //SqlDataReader对于小数据量的数据来说带来的只有麻烦。ado.net中提供了数据集的 //机制,将查询结果填充到本地内存中,这样连接断开、服务器断开都不影响数据的读取。 //数据集的好处就是降低数据库服务器压力,编程也简单。 //DataSet dataset = new DataSet(); //SqlDataAdapter adapter = new SqlDataAdapter(cmd); //adapter.Fill(dataset); //DataSet包含若干表DataTable,DataTable包含若干行DataRow, private void btnDataSet_Click(object sender, RoutedEventArgs e) { using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=DemoDB;User ID=sa;Password=540469505")) { conn.Open(); using(SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select * from T_Students where age<@Age"; cmd.Parameters.Add(new SqlParameter("@Age",txtAge.Text)); //SqlDataAdapter是一个帮我们把SqlCommand查询的结果 //填充到DataSet中的一个类 SqlDataAdapter adapter = new SqlDataAdapter(cmd); //DataSet相当于本地的一个复杂集合(类似于List<int>) DataSet dataset = new DataSet(); //执行cmd并且把SqlCommand查询的结果填充到DataSet adapter.Fill(dataset); //dataset可以放多个表,我们只放了一个表,所以下标为0 DataTable table = dataset.Tables[0]; //得到表中有多少行 DataRowCollection rows = table.Rows; for (int i = 0; i < rows.Count; i++ ) { //取出多行中的第i行 DataRow row = rows[i]; //分别去除第i行中的各个列的值 int age = (int)row["Age"]; string name = (string)row["Name"]; MessageBox.Show(name + ","+age); } } } } }}
0 0
- ado.net中的DataSet使用
- ADO.NET中的DataSet对象
- 深入分析ADO.NET中的DataSet对象
- ADO.NET 2.0中的DataSet和DataTable
- 深入分析ADO.NET中的DataSet对象
- 深入分析ADO.NET中的DataSet对象
- 深入分析ADO.NET中的DataSet对象
- 深入分析ADO.NET中的DataSet对象
- ADO.NET 2.0 中的新增 DataSet 功能
- ADO.NET 2.0中的DataSet和DataTable
- 深入分析ADO.NET中的DataSet对象
- ADO.NET 2.0中的DataSet和DataTable
- 深入分析ADO.NET中的DataSet对象
- 深入分析ADO.NET中的DataSet对象
- 深入分析ADO.NET中的DataSet对象
- ADO.NET 2.0中的DataSet和DataTable
- 深入分析ADO.NET中的DataSet对象
- ADO.NET中的DataSet的用法
- 在CSV文件导入到数据库时使用过的代码
- 如何删除多行首字母,Sublime Text多行编辑运用
- 关于状态变迁一致性接口高性能设计
- 当别人遇到困难的时候
- lamp 的php安装位置
- ado.net中的DataSet使用
- javascript常用属性
- KEIL编译错误信息表
- BlueTooth: 蓝牙Bluz协议栈概述
- POJ 1789 、Truck History
- 中国计算机学会推荐国际学术刊物
- 一道JAVA IO面试题
- oracle 下分页查询,与树形结构Sql 写法
- hdu 3602 2012