"ado.net 2.0 技術內幕
執行返回行的查詢
使用到的類和方法: SqlConnection, SqlCommand, ExecuteReader, SqlDataReader
ExecuteReader方法返回一個SqlDataReader對象, SqlDataReader對象查看結果中的一行資料, 並且是單向的
例子:
string strConn, strSQL;
strConn = @"Data Source=.\SQLExpress;" + "Initial Catalog=Northwind;Trusted_Connection=Yes;";
strSQL = "SELECT OrderID, CustomerID, OrderDate" + "FROM Orders WHERE Shipcountry = 'Canada'";
SqlConnection cn = new SqlConnection(strConn);
cn.Open();
SqlCommand cmd = new SqlCommand(strSQL, cn);
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
Console.WriteLine("{0} {1} {2:d}", rdr["OrderID"], rdr"CustomerID"], rdr["OrderDate"]);
rdr.Clode();
擷取單一值
使用到的類和方法: SqlConnection, SqlCommand, ExecuteScalar
ExecuteScalar方法不是返回一個SqlDataReader, 而是返回在一般Object資料類型中第一行第一列的值。在希望返回單一值的時候, 可以使用這個文法甜頭, 雖然它也建立了SqlDataReader, 並擷取期望值, 但不去要編寫全部代碼
例子:
string strConn, strSQL;
strConn = @"Data Source=.\SQLExpress;" + "Initial Catalog = Northwing;Trusted_Connection=Yes;";
strSQL = "SELECT SUM(UnitPrice * Quantity) " +
"FROM Orders INNER JOIN [Order Details]" +
"ON Orders.OrderID = [Order Details].OrderID" +
"WHERE CustomerID -'ALFKI'";
sqlConnertion cn = new SqlConnection(strConn);
cn.Open();
SqlCommand cmd = new SqlCommand(strSQL, cn);
decimal decOrderTotal = (decimal)cmd.ExecuteScalar();
Console.WriteLine("Order Total: {0:c}", decOrderTotal);
decimal是SQL Server的浮點數類型格式, ":c"是使用系統的貨幣格式格式化輸出
執行不返回結果集的查詢(資料更新修改)
使用到的類和方法: SqlConnection, SqlCommand, ExecuteNonQuery
可以通過調用SqlCommand的ExecuteReader方法來執行這些查詢。但是因為這些查詢不返回任何行, 所以似乎是一些不必要的開銷。幸運的是, 還有更簡單的方法, SqlCommand類公開了ExecuteNonQuery方法, 該方法執行查詢而不返回SqlDataReader對象
例子:
string strConn, strSQL;
strConn = @"Data Source=.\SQLExpress;" + "Initial Catalog=Northwind;Trusted_Connection=Yes;";
strSQL = "UPDATE Customers SET CompanyName = 'NewValue' " +
"WHERE CustomerID = 'ALFKI'";
SqlConnection cn = new SqlConnection(strConn);
cn.Open();
SqlCommand cmd = new SqlCommand(strSQL, cn);
if (cmd.ExecuteNonQuery())
Console.WriteLine ("Update succeede");
else
Console.WriteLine("Update failed");
對於 UPDATE、INSERT 和 DELETE 語句,傳回值為該命令所影響的行數。對於所有其他類型的語句,傳回值為 -1。如果發生復原,傳回值也為 -1
//執行大量操作查詢
//執行擷取XML資料的查詢
//在事務中執行查詢
//非同步執行查詢
"