【.NET】C#.NET ADO.NET資料訪問模型概述(二)1

來源:互聯網
上載者:User

二.執行SQL語句

1.使用SqlCommand執行SQL語句

一般,我們把資料庫的各種操作分成兩種:

(1)不返回記錄集的命令。通常是執行添加,插入和修改等操作的SQL語句來更新記錄。

(2)返回記錄集的命令。通常是執行查詢SQL語句來擷取資料集用於呈現。

不論是哪種操作都需要使用Command對象來執行SQL語句。

SqlCommand對象重載的幾個方法:

(1)SqlCommand()

(2)SqlCommand(string cmdText)

(3)SqlCommand(string cmdText,SqlConnection connection)

(4)Sqlcommand(string cmdText,SqlConnection connection,SqlTransaction transaction)

Sqlcommand對象需要接受一個有效Sqlconnection.用來告知Command對象我們需要和哪個資料來源進行互動。

還可以在Sqlcommand的構造方法中直接傳入要執行的SQL語句。還可以傳入SqlTransaction參數實現事務。

因此,使用一個Command對象簡單來說需要以下步驟:

(1)聲明一個有效Connection對象。

(2)聲明一個有效Command對象。

(3)為Command對象指定需要操作的SQL語句字串和關聯的Connection對象的執行個體。

(4)開啟Connection對象。

(5)執行Command對象的各種方法進行資料庫操作。

(6)關閉Connection對象。

 

2.使用參數Parameter來防止SQL注入

SqlCommand cmd =new Sqlcommand("Select count(*) from tbclass where className=@className",conn)

cmd.CommandType=CommandType.StoredProcedure;

cmd.Parameters.add("@className ",,sqlDbType.VarChar,50);

cmd.Parameters["@className"].Value=txtclass.Text;

cmd.Parameters["@className"].Direction=ParameterDirection.Input;

 

3.使用DataReader訪問資料

DataReader是唯讀只進的讀取方式。所以往往會使用迴圈語句來讀取記錄集。

以下執行個體需要引用:

using System.Data;
using System.Data.SqlClient;
using System.Text;

(1)使用DataReader讀取單記錄集

        string sConnectionString = @"Server=(Local)\SQLExpress;database=GuestBook;Trusted_Connection=True";
        using (SqlConnection conn = new SqlConnection(sConnectionString))
        {
            conn.Open();
            using (SqlCommand cmd = new SqlCommand("Select * from tbGuestBook", conn))
            {
                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    if (dr.HasRows)
                    {
                        StringBuilder htmlstr = new StringBuilder();
                        //使用StringBuilder構造字串效率比較高
                        htmlstr.Append("<table border='1' cellpadding='5' cellspacing='0' style='font-size:9pt;font:宋體'>");//表格開始
                        htmlstr.Append("<tr style='background-color=#f0f0f0'>");//表頭開始
                        for (int i = 0; i < dr.FieldCount; i++)
                        {
                            htmlstr.Append(string.Format("<td><strong>{0}</strong></td>",dr.GetName(i)));//構造表頭
                        }
                        htmlstr.Append("</tr>");//表頭結束
                        while (dr.Read())
                        {
                            htmlstr.Append("<tr>");//記錄行開始
                            for (int i = 0; i < dr.FieldCount; i++)
                            {
                                htmlstr.Append(string.Format("<td>{0}</td>",dr.GetValue(i)));//構造記錄行
                            }
                            htmlstr.Append("</tr>");//記錄行結束
                        }
                        htmlstr.Append("</table>");//表格結束
                        Response.Write(htmlstr);
                    }
                }
            }
        }

(2)使用DataReader讀取多記錄集

        string sConnectionString = @"Server=(Local)\SQLExpress;database=bbs;Trusted_Connection=True";
        using (SqlConnection conn = new SqlConnection(sConnectionString))
        {
            conn.Open();
            using (SqlCommand cmd = new SqlCommand("Select * from Bbs_Link ; Select * from Bbs_MenuBig", conn))
            {
                using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))//得到一個DataReader.
                {
                    if (dr.HasRows)//記錄集是否為空白
                    {
                        do
                        {
                            StringBuilder htmlstr = new StringBuilder();
                            //使用StringBuilder構造字串效率比較高
                            htmlstr.Append("<table border='1' cellpadding='5' cellspacing='0' style='font-size:9pt;font:宋體'>");//表格開始
                            htmlstr.Append("<tr style='background-color=#f0f0f0'>");//表頭開始
                            for (int i = 0; i < dr.FieldCount; i++)
                            {
                                htmlstr.Append(string.Format("<td><strong>{0}</strong></td>", dr.GetName(i)));//構造表頭
                            }
                            htmlstr.Append("</tr>");//表頭結束
                            while (dr.Read())
                            {
                                htmlstr.Append("<tr>");//記錄行開始
                                for (int i = 0; i < dr.FieldCount; i++)
                                {
                                    if(!dr.IsDBNull(i))
                                    htmlstr.Append(string.Format("<td>{0}</td>", dr.GetValue(i)));//構造記錄行
                                }
                                htmlstr.Append("</tr>");//記錄行結束
                            }
                            htmlstr.Append("</table>");//表格結束
                            Response.Write(htmlstr);
                        } while (dr.NextResult());
                    }
                }
            }
        }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.