C# ADO.NET的五個常用對象及資料庫連接操作

來源:互聯網
上載者:User


C#中和資料庫連接的操作時開發中必不可少的,而ADO.NET就是其中的關鍵技術之一。常見的ADO.NET有五個常用的對象:

SqlConnection 資料庫連接對象SqlCommand 資料庫命令對象SqlDataAdapter 資料配接器SqlDataReader 資料庫讀取器,“唯讀、向前”,不能後退地讀取資料DataSet  資料集,相當於記憶體中的資料庫

以下為這幾個對象常用的方法:

ExecuteScalar():只能讀一條記錄,一般用來判斷資料庫是否有資料等,只能讀不能寫。(MSDN解釋:執行查詢,並返回查詢所返回結果集中的第一行

                               第一列,忽略其他行其他列)ExecuteScalar():這種CMD相當於我們在ADO中用SQL語句中使用一些計算函數的功能一樣,在這裡我

                              們只是返回所有影響的行數的第一行第一列資料,這樣也就是相當於專業為我們的如:select count(*) from database的功能一樣,我們

                              可以用                                           

                                               string sql="select * from  database"

                                              SqlCommand cmd=SqlCommand(sql,conn)

                                              int i=(int)cmd.ExecuteScalar()

                             這樣我們的局部變更i的值就是與上面我的功能一樣.

ExecuteReader:可以讀一個表的記錄,只能讀不能寫。我們通常在asp中用Recordset對象來從資料庫中讀出資料,並且用迴圈語句來一個一個的讀出資料,

                             但在我們的ADO.NET中,我們就是用DataReader 對象的ExecuteReader()方法來進行資料的列出,並且我們用這個ExecuteReader()方法

                            來顯示資料是最快的一種方法,因為當我們在用ExecuteReader()方法中的DataReader 對象來進行資料的在網站建設中顯示時,他只可以

                            一條一條向前讀,不能返回,也就是像ASP中的ADO方法中的Recordset 對象的Movenext一樣,他沒有move -1這樣的返回方法。

                           ExecuteReader 返回一個DataReader, DataReader 是一個順向資料指標, 用於讀取表中的資料, 讀取時,必須 要和資料庫保持串連。

ExecuteNonQuery:可以寫以可以讀。這個東東可以讓我們在更新資料庫時不使用 DataSet 而使用 ExecuteNonQuery 更改資料庫中的資料。通過執行

                                  UPDATE、INSERT 或 DELETE SQL語句就可以達到更改資料庫中的資料目的。即使 ExecuteNonQuery 不返回任何行,映射到參數的

                                  輸出參數或傳回值仍然使用資料填充。但對於 UPDATE、INSERT 和 DELETE SQL語句,返回的值就是受ExecuteNonQuery()命令影響

                                 的行數。對其它類型的語句以及回退來說,返回的值都是 -1。ExecuteNonQuery 用於執行 Delete, Update, Insert, 語句,  返回影響行數。

以下是網上借用的一個資料庫操作類DBHelper.cs樣本:(代碼僅供學習交流之用,備忘)

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.SqlClient;using System.Data;namespace HotelManagerDAL{    public class DBHelper    {        //聲明連線物件        static SqlConnection conn;        /// <summary>        /// 串連屬性        /// </summary>        public static SqlConnection Conn        {            get             {                if (conn == null)                {                    conn = new SqlConnection("server=.;database=HotelManagerDB;uid=sa;pwd=**");                    conn.Open();                    return conn;                }                if (conn.State == ConnectionState.Closed)                {                    conn.Open();                    return conn;                }                if (conn.State == ConnectionState.Broken)                {                    conn.Close();                    conn.Open();                    return conn;                }                return DBHelper.conn;                         }        }        #region 增刪改共同工具方法,硬綁定        /// <summary>        /// 增刪改共同工具方法        /// </summary>        /// <param name="sqlStr"></param>        /// <returns></returns>        public static int ExecuteNonQuery(string sqlStr)        {            SqlCommand cmd = new SqlCommand(sqlStr, DBHelper.Conn);            return cmd.ExecuteNonQuery();        }         #endregion        #region 增刪改共同工具方法,軟綁定        /// <summary>        /// 增刪改共同工具方法        /// </summary>        /// <param name="sqlStr"></param>        /// <returns></returns>                                                                                                      public static int ExecuteNonQuery(string sqlStr,params SqlParameter[] para)        {            SqlCommand cmd = new SqlCommand(sqlStr, DBHelper.Conn);            cmd.Parameters.AddRange(para);            return cmd.ExecuteNonQuery();        }        #endregion        #region 得到整體資訊,硬綁定        /// <summary>        /// 得到整體資訊        /// </summary>        /// <param name="sqlStr"></param>        /// <returns></returns>        public static object ExecuteScalar(string sqlStr)        {            SqlCommand cmd = new SqlCommand(sqlStr, DBHelper.Conn);            return cmd.ExecuteScalar();        }         #endregion        #region 得到整體資訊,軟綁定        /// <summary>        /// 得到整體資訊        /// </summary>        /// <param name="sqlStr"></param>        /// <returns></returns>        public static object ExecuteScalar(string sqlStr,params SqlParameter[] para)        {            SqlCommand cmd = new SqlCommand(sqlStr, DBHelper.Conn);            cmd.Parameters.AddRange(para);            return cmd.ExecuteScalar();        }        #endregion        #region 得到所有資訊,直連式查詢,硬綁定        /// <summary>        /// 得到所有資訊        /// </summary>        /// <param name="sqlStr"></param>        /// <returns></returns>        public static SqlDataReader ExecuteReader(string sqlStr)        {            SqlCommand cmd = new SqlCommand(sqlStr, DBHelper.Conn);            return cmd.ExecuteReader();        }        #endregion        #region 得到所有資訊,直連式查詢,軟綁定        /// <summary>        /// 得到所有資訊        /// </summary>        /// <param name="sqlStr"></param>        /// <returns></returns>        public static SqlDataReader ExecuteReader(string sqlStr, params SqlParameter[] para)        {            SqlCommand cmd = new SqlCommand(sqlStr, DBHelper.Conn);            cmd.Parameters.AddRange(para);            return cmd.ExecuteReader();        }        #endregion        #region 得到所有資訊,斷開式查詢,硬綁定        /// <summary>        /// 得到所有資訊        /// </summary>        /// <param name="sqlStr"></param>        /// <returns></returns>        public static DataSet ExecuteReaderDataSet(string sql)        {            SqlDataAdapter sda = new SqlDataAdapter(sql, DBHelper.Conn);            DataSet ds = new DataSet();            sda.Fill(ds);            return ds;        }        #endregion        #region 得到所有資訊,斷開式查詢,軟綁定        /// <summary>        /// 得到所有資訊        /// </summary>        /// <param name="sqlStr"></param>        /// <returns></returns>        public static DataSet ExecuteReaderDataSet(string sqlStr, params SqlParameter[] para)        {            SqlDataAdapter sda = new SqlDataAdapter();            SqlCommand cmd = new SqlCommand(sqlStr,DBHelper.Conn);            cmd.Parameters.AddRange(para);            sda.SelectCommand = cmd;            DataSet ds = new DataSet();            sda.Fill(ds);            return ds;        }        #endregion    }}

 另外附上SqlParameter的用法:http://www.23sj.net/show_article.aspx?aid=AL20120423001   這位博主已經寫得很詳細了,備忘學習:

一般來說,在更新DataTable或是DataSet時,如果不採用SqlParameter,那麼當輸入的Sql語句出現歧義時,如字串中含有單引號,程式就會發生錯誤,並且他人可以輕易地通過拼接Sql語句來進行注入攻擊。最方便的使用SqlParameter的方法如下:

SqlParameter[] paras = new SqlParameter[] { new SqlParameter("@name", "Pudding"), new SqlParameter("@ID", "1") };  cmd.Parameters.AddRange(paras);  

以上文字來源為自己學習所得,集中進行整理學習之用,希望對你我學習都有協助。

聯繫我們

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