1. 程式人生 > >C# ADO.NET的五個常用物件及資料庫連線操作

C# ADO.NET的五個常用物件及資料庫連線操作

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

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