一、常用属性
名称 | 说明 |
Depth | 获取一个值,用于指示当前行的嵌套深度 |
FieldCount | 获取当前行中的列数 |
HasRows | 获取一个值,该值指示 SqlDataReader 是否有行 |
IsClosed | 指定的SqlDataReader 实例是否已关闭 |
Item[Int32] | 获取指定列(数字索引),通常在While.Read()中使用 |
Item[String] | 获取指定列(字符串索引), 通常在While.Read()中使用 |
RecordsAffected | 获取执行 T-SQL 语句所更改、插入或删除的行数 |
VisibleFieldCount | 获取 SqlDataReader 中未隐藏的字段的数目 |
using MySql.Data.MySqlClient; using System; using System.Data.Common; namespace ConsoleApp { class Program { static void Main(string[] args) { string str = string.Format("Server={0};Port={1};Database={2};Uid={3};Pwd={4};", "localhost",3306, "wisdompurchase","root","1234"); DbConnection conn = new MySqlConnection(str); //创建连接 DbCommand cmd = conn.CreateCommand(); //创建SqlCommand对象 cmd.CommandText = "SELECT * FROM `t_s_base_user` LIMIT 3"; conn.Open(); //打开连接 using (DbDataReader reader = cmd.ExecuteReader()) { Console.WriteLine(reader.FieldCount); //2 获取列数 Console.WriteLine(reader.Depth); //0 嵌套深度 Console.WriteLine(reader.HasRows); //true 是否包含行 Console.WriteLine(reader.IsClosed); //false SqlDataReader是否关闭 Console.WriteLine(reader.RecordsAffected); //-1 执行T-SQL语句所插入、修改、删除的行数 Console.WriteLine(reader.VisibleFieldCount); //2 未隐藏的字段数目(一共就两列) while (reader.Read()) { Console.WriteLine(reader["realname"]); //Console.WriteLine(reader[1]); 通过数字索引或字符串索引访问 } } conn.Close(); //关闭连接 Console.ReadKey(); } } }
二、常用方法
名称 | 说明 |
Read() | 前进到下一记录,异步版本ReadAsync |
GetString() | 返回指定类型的值,其他的都类似 |
NextResult() | 当处理批处理的T-SQL语句时,跳到下一结果,异步版本NextResultAsync |
GetValue() | 获得该列的值,返回object类型 |
GetValues() | 使用当前列指来填充参数中的对象数组 |
Close() | 关闭 SqlDataReader 对象 |
using MySql.Data.MySqlClient; using System; using System.Data.Common; using System.Threading; using System.Threading.Tasks; namespace ConsoleApp { class Program { static void Main(string[] args) { string str = string.Format("Server={0};Port={1};Database={2};Uid={3};Pwd={4};", "localhost", 3306, "wisdompurchase", "root", "1234"); DbConnection conn = new MySqlConnection(str); //创建连接 DbCommand cmd = conn.CreateCommand(); //创建SqlCommand对象 cmd.CommandText = "SELECT username,realname FROM `t_s_base_user` LIMIT 3"; conn.Open(); //打开连接 //Console.WriteLine("======同步读取开始====="); //NormalRead(cmd); //Console.WriteLine("======同步读取接收====="); cmd.CommandText = "SELECT username,realname FROM `t_s_base_user`"; CancellationTokenSource tokenSource = new CancellationTokenSource(); CancellationToken cancellToken = tokenSource.Token; Console.WriteLine("======异步读取开始====="); AsyncRead(cmd, cancellToken); Console.WriteLine("======异步读取结束====="); Console.WriteLine("按下任意键即可取消任务!"); Console.ReadKey(); tokenSource.Cancel(); Console.WriteLine("按下任意键即可关闭连接!"); Console.ReadKey(); conn.Close(); //关闭连接 } /// <summary> /// 正常读取 /// </summary> /// <param name="cmd"></param> static void NormalRead(DbCommand cmd) { using (DbDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { Console.WriteLine("reader.IsDBNull={0}", reader.IsDBNull(1)); //是否是null值 Console.WriteLine("reader.GetString={0}", reader.GetString(1)); //Get什么类型就返回什么类型,这没啥好说的。 } Console.WriteLine("reader.GetName={0}", reader.GetName(1)); //realname 由数字获得列名 Console.WriteLine("reader.GetOrdinal={0}", reader.GetOrdinal("realname")); //1 由列名获取其在reader中的数字索引 if (reader.NextResult()) { Console.WriteLine(reader.GetString(1)); } } } async static void AsyncRead(DbCommand cmd, CancellationToken cancellToken) { using (DbDataReader reader = cmd.ExecuteReader()) { try { while (await reader.ReadAsync(cancellToken)) { Console.WriteLine("reader.IsDBNull={0}", reader.IsDBNull(1)); //是否是null值 Console.WriteLine("reader.GetString={0}", reader.GetString(1)); //Get什么类型就返回什么类型,这没啥好说的。 await Task.Delay(500); } } catch (TaskCanceledException canceleEx) { Console.WriteLine("编辑被取消:{0}", canceleEx.Message); } catch (Exception ex) { Console.WriteLine("遍历报错:{0}", ex.Message); } bool NextResult = await reader.NextResultAsync(); if (NextResult) { Console.WriteLine(reader.GetString(1)); } } } } }