Skip to content
February 25, 2011 / windperson

ADO.Net使用上幾個要注意的地方

  • DataAdapter.Fill()來抓取資料時,如果下的SQL Query得到的查詢結果是沒有內容(Row Count =0)的,有時被Fill()的DataSet內部的DataTable物件會是沒有正確定義它的各個欄位,最好都先用DataAdapter.FillSchema(ds, SchemaType.Mapped)來取得正確的Table Schema。
  • 同上的情形時,可能會有該DataTable的DataRow不能以名稱字串(["name"])做index的方式做欄位資料的存取情形,這時請改用以數字([0])做index的方式來取得該欄位的資料。
  • SqlConnection底層的有所謂的”Connection Pooling”的機制,所以,如果沒有在ConnectionString裡指定”Pooling=false”的話,同時new好幾個SqlConnection物件,底層可能實際上都是同一條連線。
  • 為了安全性的考量,SqlConnection的Persist Security Info預設值是false,行為上就是該SqlConnection物件只要被使用過一次後(呼叫Open()或者是餵給DataReader、DataAdapter做撈資料函式呼叫的參數),其ConnectionString內有關使用者密碼的部分就會自動消失。
  • 可以的話,盡量用***ConnectionStringBuilder來產生對應該種資料庫的ConnectionString(通常是設定好各種屬性值之後直接用那個builder.ToString()或是該builder的ConnectionString屬性來取得結果),以避免”connection string injection”攻擊。
  • SqlTranscation物件得由SqlConnection物件的BeginTranscation()呼叫來取得,而在這之前,該SqlConnection物件得先呼叫Open()一次才能避免產生InvalidOperationException。

reference:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx
http://www.aspdotnetcodes.com/SqlBulkCopy_With_SqlTransaction.aspx

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: