Winform開發之SqlCommand常用屬性和方法


SqlCommand類表示要對 SQL Server 數據庫執行的一個 Transact-SQL 語句或存儲過程,有若干個屬性和若干個方法,具體的各類方法使用可以從msdn上找到。

這里介紹幾個常用東東

一、屬性

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

static void Main(string[] args)
        {
            string str = "server=.;database=JunTest;uid=sa;pwd=123";
            SqlConnection conn = new SqlConnection(str);
            SqlCommand 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語句 cmd.CommandText=CommandType.StoredProcedure/CommandType.Text
            //SqlCommand的SqlConnection實例對象
            Console.WriteLine(cmd.Connection.ConnectionString);     //"server=.;database=JunTest;uid=sa;pwd=123";
            //設置參數值
            cmd.Parameters.Add("@Id", SqlDbType.Int);
            cmd.Parameters["@Id"].Value = 1;
            Console.WriteLine(cmd.Parameters["@Id"].Value);     //輸出1
            conn.Open();
            conn.Close();
            Console.ReadKey();
        }

二、方法

1、SqlCommand.ExecuteNonQuery 方法

對數據庫的增刪改都用這個操作,只是里面調用的sql語句和存儲過程不同

static void Main(string[] args)
        {
            string str = "server=.;database=JunTest;uid=sa;pwd=123;";
            SqlConnection conn = new SqlConnection(str);        //創建連接
            SqlCommand cmd = conn.CreateCommand();              //創建命令
            cmd.CommandText = "Update Person Set PersonName = 'Ado.net修改' WHERE PersonId = @Id";    //設置操作語句
            cmd.Parameters.Add("@Id", SqlDbType.Int);           //添加參數,說明類型
            cmd.Parameters["@Id"].Value = 1;                    //設置參數值
            conn.Open();                                        //打開連接
            int i = cmd.ExecuteNonQuery();                      //執行命令,ExecuteNonQuery由名稱看出,只能用於非查詢語句
            conn.Close();                                       //關閉連接
            Console.WriteLine(i);                               //輸出影響行數
            
            Console.ReadKey();
        }

2、ExecuteScalar()

創建一個 SqlCommand,然后使用 ExecuteScalar 執行它。 向該示例傳遞兩個字符串,一個字符串表示要插入到表中的新值,另一個字符串用於連接至數據源。 如果已插入新行,則此函數會返回新的“Identity”列值,如果失敗,則返回 0。

static public int AddProductCategory(string newName, string connString)
{
    Int32 newProdID = 0;
    string sql =
        "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "
        + "SELECT CAST(scope_identity() AS int)";
    using (SqlConnection conn = new SqlConnection(connString))
    {
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.Add("@Name", SqlDbType.VarChar);
        cmd.Parameters["@name"].Value = newName;
        try
        {
            conn.Open();
            newProdID = (Int32)cmd.ExecuteScalar();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    return (int)newProdID;
}

3、ExecuteReader() 

static void Main(string[] args)
        {
            string str = "server=.;database=JunTest;uid=sa;pwd=123;";
            SqlConnection conn = new SqlConnection(str);        //創建連接
            SqlCommand cmd = conn.CreateCommand();              //創建命令
            cmd.CommandText = "SELECT * FROM Person";           //設置操作語句
            conn.Open();                                        //打開連接
            //SqlDataReader讀取數據
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    Console.WriteLine(reader[0] + ":" + reader[1]);     //輸出當前行的第一列,第二列數據
                }
            }

            cmd.CommandText = "SELECT Count(*) FROM Person";
            object obj = cmd.ExecuteScalar();                   //僅查詢第一行第一列
            Console.WriteLine((int)obj);
            conn.Close();                                       //關閉連接
            
            Console.ReadKey();
        }

 4、ExecuteXmlReader()  返回System.XmlReader實例,用於讀取SQLServer中的XML字段的值

數據庫字段存的就是xml

<Article>
  <author age="30">張三</author>
  <length>12000</length>
  <price>42</price>
</Article>
static void Main(string[] args)
        {
            string str = "server=.;database=JunTest;uid=sa;pwd=123;";
            SqlConnection conn = new SqlConnection(str);        //創建連接
            SqlCommand cmd = conn.CreateCommand();              //創建命令
            cmd.CommandText = "SELECT * FROM Person";           //設置操作語句
            conn.Open();                                        //打開連接

            cmd.CommandText = "SELECT Top 1 ArticleInfo FROM Article";  //查詢XML字段
            using (XmlReader reader = cmd.ExecuteXmlReader())           //由Command實例返回XmlReader的實例
            {
                while (reader.Read())
                {
                    if (reader.Name == "author")
                    {
                        Console.WriteLine(reader.ReadInnerXml());       //輸出張三
                    }
                }
            }
            conn.Close();       

            Console.ReadKey();
        }

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

  5、BeginExecuteNonQuery() 異步版ExecuteNonQuery()

  6、EndExecuteNonQuery()  異步版ExecuteNonQuery()

class Program
    {
        static void Main(string[] args)
        {
            string str = "server=.;database=JunTest;uid=sa;pwd=123;Asynchronous Processing=true";
            SqlConnection conn = new SqlConnection(str);            //創建連接
            SqlCommand cmd = conn.CreateCommand();                  //創建命令
            cmd.CommandText = "INSERT INTO Person VALUES(11,'郭嘉')";    //設置操作語句
            conn.Open();                                            //打開連接
            cmd.BeginExecuteNonQuery(BeginCallback, cmd);           //異步執行語句
            Console.WriteLine("不管你執沒執行完,我繼續做我的事!");

            Console.ReadKey();
        }

        public static void BeginCallback(IAsyncResult result)
        {
            Console.WriteLine("正在執行SQL命令!");
            SqlCommand cmd = result.AsyncState as SqlCommand;   //獲得異步傳入的參數
            Console.WriteLine("成功執行命令:" + cmd.CommandText);
            Console.WriteLine("本次執行影響行數為:"  + cmd.EndExecuteNonQuery(result));
            Console.WriteLine("關閉連接!");
            cmd.Connection.Close();     //正式關閉連接
        }
    }

本文一部分來自msdn,一部分來自逆心的博客


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM