一、常用屬性
名稱 | 說明 |
CommandText | 獲取或設置要對數據源執行的 Transact-SQL 語句、表名或存儲過程 |
CommandTimeout | 獲取或設置在終止執行命令的嘗試並生成錯誤之前的等待時間 |
CommandType | 獲取或設置一個值,該值指示釋 CommandText 是SQL語句,存儲過程還是表操作 |
Connection | 獲取或設置 DbCommand 的此實例使用的 DbConnection |
Parameters | 獲取 DbParameterCollection |
Transaction | 獲取或設置將在其中執行 DbCommand 的 DbTransaction |

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(); cmd.CommandText = "Update Person Set Name = 'Ado.net修改' WHERE Id = @Id"; //設置操作語句 //看看默認的發生錯誤等待時間(秒) Console.WriteLine(cmd.CommandTimeout); //30 //指明CommandText是SQL語句,存儲過程還是表操作。枚舉類型,轉到定義可看 Console.WriteLine(cmd.CommandType); //輸出 Text 表示這是一條SQL語句 //SqlCommand的SqlConnection實例對象 Console.WriteLine(cmd.Connection.ConnectionString); //"server=.;database=JunTest;uid=sa;pwd=123"; //設置參數值 cmd.Parameters.Add(new MySqlParameter("@Id", 1)); Console.WriteLine(cmd.Parameters["@Id"].Value); //輸出1 conn.Open(); conn.Close(); Console.ReadKey(); } } }
二、常用方法
1、ExecuteNonQuery() 增刪改操作
增、刪、改都是這個:

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(); //創建命令 cmd.CommandText = "Update t_s_base_user Set realname = '李偉斌' WHERE Id = @Id"; //設置操作語句 cmd.Parameters.Add(new MySqlParameter("@Id",MySqlDbType.VarChar)); //設置參數值 cmd.Parameters["@Id"].Value = 1; conn.Open(); //打開連接 int i = cmd.ExecuteNonQuery(); //執行命令,ExecuteNonQuery由名稱看出,只能用於非查詢語句 conn.Close(); //關閉連接 Console.WriteLine(i); //輸出影響行數 Console.ReadKey(); } } }
2、ExecuteScalar() 返回第一行第一列
3、ExecuteReader() 創建一個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(); //創建命令 cmd.CommandText = "SELECT * FROM `t_s_base_user` LIMIT 5"; //設置操作語句 conn.Open(); //打開連接 //SqlDataReader讀取數據 using (DbDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { Console.WriteLine(reader[0] + ":" + reader[1]); //輸出當前行的第一列,第二列數據 } } cmd.CommandText = "SELECT Count(*) FROM `t_s_base_user`"; object obj = cmd.ExecuteScalar(); //僅查詢第一行第一列 Console.WriteLine(Convert.ToInt32(obj)); conn.Close(); //關閉連接 Console.ReadKey(); } } }
4、ExecuteXmlReader() 返回System.XmlReader實例,用於讀取SQLServer中的XML字段的值
首先建一張表如下:

/* SQLyog Ultimate v11.33 (64 bit) MySQL - 5.7.17-log ********************************************************************* */ /*!40101 SET NAMES utf8 */; insert into `article` (`ArticleId`, `ArticleInfo`) values('1','<Article><author age=\"30\">張三</author><length>12000</length><price>42</price></Article>');
其中ArticleInfo字段的數據類型為xml,值為:
<Article><author age="30">張三</author><length>12000</length><price>42</price></Article>
下面,我們使用ExecuteXmlReader()讀取出author的值:

using System; using System.Data.Common; using System.IO; using System.Xml; namespace ConsoleApp { public static class ExtensionDbCommand { public static XmlReader ExecuteXmlReader(this DbCommand cmd) { object obj = cmd.ExecuteScalar(); //僅查詢第一行第一列 if (obj == null) return null; StringReader strRdr = new StringReader(Convert.ToString(obj)); return XmlReader.Create(strRdr); } } }

using MySql.Data.MySqlClient; using System; using System.Data.Common; using System.Xml; 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(); //創建命令 conn.Open(); //打開連接 cmd.CommandText = "SELECT ArticleInfo FROM Article LIMIT 1"; //查詢XML字段 using (XmlReader reader = cmd.ExecuteXmlReader()) //由Command實例返回XmlReader的實例 { while (reader!=null && reader.Read()) { if (reader.Name == "author") { Console.WriteLine(reader.ReadInnerXml()); //輸出張三 } } } conn.Close(); Console.ReadKey(); } } }
還有就是以上這些方法的異步版本,本處僅以以下兩個方法示例:
5、BeginExecuteNonQuery() 異步版ExecuteNonQuery()
6、EndExecuteNonQuery() 異步版ExecuteNonQuery()

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); //創建連接 //連接的數據庫名稱 MySqlCommand cmd = (MySqlCommand)conn.CreateCommand(); //創建命令 cmd.CommandText = "INSERT INTO `article` VALUES(2,'郭嘉')"; //設置操作語句 conn.Open(); //打開連接 cmd.BeginExecuteNonQuery(BeginCallback, cmd); //異步執行語句 Console.WriteLine("不管你執沒執行完,我繼續做我的事!"); Console.ReadKey(); } static void BeginCallback(IAsyncResult result) { Console.WriteLine("正在執行SQL命令!"); MySqlCommand cmd = result.AsyncState as MySqlCommand; //獲得異步傳入的參數 Console.WriteLine("成功執行命令:" + cmd.CommandText); Console.WriteLine("本次執行影響行數為:" + cmd.EndExecuteNonQuery(result)); Console.WriteLine("關閉連接!"); cmd.Connection.Close(); //正式關閉連接 } } }