淺析ADO.NET的相關知識
ADO.NET在處理數(shù)據(jù)時,可分為連接式與斷開式
ADO.NET涉及到的主要對象:
連接對象:Connection
命令對象:Command
數(shù)據(jù)讀取器對象:DataReader
數(shù)據(jù)適配器對象:DataAdapter
數(shù)據(jù)集對象: DataSet
下面是一個簡單的ADO.NET連接式訪問數(shù)據(jù)庫的代碼
- private static void ReadOrderData(string connectionString)
- {
- string queryString =
- "SELECT OrderID, CustomerID FROM dbo.Orders;";
- //此處使用using來自動釋放connection
- using (SqlConnection connection =
- new SqlConnection(connectionString))
- {
- SqlCommand command =
- new SqlCommand(queryString, connection);
- connection.Open();
- SqlDataReader reader = command.ExecuteReader();
- // SqlDataReader 的默認位置在***條記錄前面。因此,必須調(diào)用 Read 來開始訪問任何數(shù)據(jù)
- while (reader.Read())
- {
- Console.WriteLine(String.Format("{0}, {1}",
- reader[0], reader[1]));
- }
- // 關閉reader
- reader.Close();
- //對于SqlConnection的MARS模式關閉的情況下,一次只能打開一個 SqlDataReader,在***個關閉之前,打開另一個的任何嘗試都將失敗。另外,在reader不關閉之前,相同的command.ExecuteReader();將會失敗(無論是否為MARS)
- }
- }
接下來對上面這段代碼做一些說明:
代碼:
- Console.WriteLine(String.Format("{0}, {1}",
- reader[0], reader[1]));
使用了reader的索引器,
索引器調(diào)用所的方法如下:
- override public object this[int i] {
- get {
- return GetValue(i);
- }
- }
- override public object this[string name] {
- get {
- return GetValue(GetOrdinal(name));
- }
- }
(二)關于command的一些方法的說明
ExecuteNonQuery 對連接執(zhí)行 Transact-SQL 語句并返回受影響的行數(shù)。 (重寫 DbCommand..::.ExecuteNonQuery()()()。)
ExecuteReader 已重載。 將 CommandText 發(fā)送到 Connection 并生成一個 SqlDataReader。
ExecuteScalar 執(zhí)行查詢,并返回查詢所返回的結(jié)果集中***行的***列。忽略其他列或行。 (重寫
DbCommand..::.ExecuteScalar()()()。)
ExecuteXmlReader 將 CommandText 發(fā)送到 Connection 并生成一個 XmlReader 對象。
(三)關于connectionstring
以下是常用的幾種connectionstring
- //基本
- string baseconnstr="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword";
- //MARS
- string marsconnstr="Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;"
- +"MultipleActiveResultSets=true"
- //在app_data文件夾中的sqlexpress.mdf
- string mdfDataDir="Server=.\SQLExpress;AttachDbFilename=|DataDirectory|mydbfile.mdf; Database=dbname;Trusted_Connection=Yes;"
- //使用SQL集群故障轉(zhuǎn)移
- string mirrorconnstr="Data Source=myServerAddress;Failover Partner=myMirrorServerAddress;Initial Catalog=myDataBase;Integrated Security=True;"
- //異步
- string asynconnstr="Server=myServerAddress;Database=myDataBase;Integrated Security=True;Asynchronous Processing=True;"
MARS中,其實ADO.NET是對未關閉的sqlcommand掛起.所以datareader只能使用其各自的command實例.
【編輯推薦】