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