一、常用屬性
名稱 | 說明 |
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)); } } } } }