1. 程式人生 > >C#操作DbCommand類

C#操作DbCommand類

異步執行 關閉 lec 繼續 關閉連接 lda () mys 成功

一、常用屬性

名稱 說明
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(); } } }
View Code

二、常用方法

  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();
        }
    }
}
View Code

  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();
        }
    }
}
View Code

  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>);
ArticleSql

  其中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);
        }
    }
}
ExtensionDbCommand 技術分享圖片
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();
        }
    }
}
Program

 還有就是以上這些方法的異步版本,本處僅以以下兩個方法示例:

  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();     //正式關閉連接
        }
    }
}
Program

C#操作DbCommand類