具體使用ADO.NET操作相關技巧
ADO.NET操作都可能產生一個或多個提供者錯誤。隨著每個錯誤的發生這是因為現在數據是順序返回的,并且DataReader一旦讀過該數據,該數據就不再可用。下面進行學習研究。
使用CommandBuilder的***實踐
假設SelectCommand執行單一表SELECT,CommandBuilder就會以DataAdapter的SelectCommand屬性為基礎自動生成DataAdapter的InsertCommand、UpdateCommand、和DeleteCommand屬性。下面是為獲得***性能而使用CommandBuilder的一些技巧。
1) CommandBuilder的使 ADO.NET操作用應該限制在設計時或即席方案中。生成DataAdapter命令屬性所必需的處理會影響性能。如果預先知道INSERT/UPDATE/DELETE語句的內容,就顯式設置它們。一個比較好的設計技巧是,為INSERT/UPDATE/DELETE命令創建存儲過程并顯式配置DataAdapter命令屬性以使用它們。
2) CommandBuilder使用DataAdapter的SelectCommand屬性確定其他命令屬性的值。如果DataAdapter的SelectCommand本身曾經更改過,確保調用RefreshSchema以更新命令屬性。
3) 如果DataAdapter命令屬性為空(命令屬性默認情況下為空),CommandBuilder僅僅為它生成一條命令。如果顯式設置了命令屬性,CommandBuilder不會重寫它。如果希望CommandBuilder為以前已經設置過 ADO.NET操作的命令屬性生成命令,就將命令屬性設置為空。 #t#
批處理SQL語句
很多數據庫支持將多條命令合并或批處理成一條單一命令執行。例如,SQL Server使您可以用分號“;”分隔命令。將多條命令合并成單一命令,能減少到服務器的行程數,并提高應用程序的性能。例如,可以將所有預定的刪除在應用程序中本地存儲起來,然后再發出一條批處理命令調用,從數據源刪除它們。
雖然這樣做確實能提高性能,但是,當 ADO.NET操作對DataSet中的數據更新進行管理時,可能會增加應用程序的復雜性。要保持簡單,可能要在DataSet中為每個DataTable創建一個DataAdapter。
用多個表填充DataSet
如果使用批處理SQL語句檢索多個表并填充DataSet,***個表用指定給Fill方法的表名命名。 ADO.NET操作后面的表用指定給Fill方法的表名加上一個從1開始并且增量為1的數字命名。例如,如果運行下面的代碼。
用DataReader檢索二進制大對象(BLOB)時,應該將CommandBehavior.SequentialAccess傳遞給ExecuteReader方法調用。因為DataReader的默認行為是每次Read都將整行加載到內存,又因為BLOB值可能非常大,所以結果可 ADO.NET操作能由于單個BLOB而使大量內存被用光。SequentialAccess將DataReader的行為設置為只加載請求的數據。然后還可以使用GetBytes或GetChars控制每次加載多少數據。