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);
以上文字來源為自己學習所得,集中進行整理學習之用,希望對你我學習都有幫助。