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

來源:互聯網
上載者:User

標籤:

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,一部分來自逆心的部落格

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.