顯示具有 連接資料庫 標籤的文章。 顯示所有文章
顯示具有 連接資料庫 標籤的文章。 顯示所有文章

2017/10/09

[ADO.NET] VB.net 資料庫連線 IV

接續前一篇 [ADO.NET] VB.net 資料庫連線 III
系列文章最後一篇,說明如何使用參數方式來避免隱碼攻擊


If VbConn.State = ConnectionState.Closed Then
   VbConn.ConnectionString = VbConnectionString
   VbConn.Open()
   Dim VbCommand As System.Data.SqlClient.SqlCommand = VbConn.CreateCommand

   VbCommand.CommandText="SELECT * FROM Test WHERE test1=@p1"
   VbCommand.Parameters.AddWithValue("@p1" , "a123")


   Dim ExecuteReturn As Integer = VbCommand.ExecuteNonQuery
   VbCommand.Cancel()
   VbConn.Close()
End If

接著說明DataAdapter如何使用參數
Dim MyDataTable As New DataTable
Dim GetData As String=""
Using VbConn As SqlClient.SqlConnection = New SqlClient.SqlConnection(VbConnectionString)

   Using Adp As New System.Data.SqlClient.SqlDataAdapter("SELECT * FROM Test WHERE test1=@p1", VbConn)
     Adp.SelectCommand.Parameters.AddWithValue("@p1" , "A123")


     Adp.Fill(MyDataTable)
   End Using

End Using

For i = 0 To MyDataTable.Rows.Count - 1 Step 1
   GetData = MyDataTable.Rows(i).Item("欄位名稱")
Next


使用參數化查詢並沒有特別困難,但是要特別注意!!
以SELECT * FROM Test WHERE test1=@p1 這個範例來說,無論test1這個欄位是不是文字格式,都只要輸入test1=@p1就好,千萬不要輸入test1='@p1',會造成系統錯誤。

補充:
如果使用的是OdbcParameter 參數的使用會比較不同
範例:
If VbConn.State = ConnectionState.Closed Then
   VbConn.ConnectionString = VbConnectionString
   VbConn.Open()
   Dim VbCommand As System.Data.Odbc.OdbcCommand = VbConn.CreateCommand

   VbCommand.CommandText="SELECT * FROM Test WHERE test1=? AND test2=?"
   VbCommand.Parameters.Add("test1" ,OdbcType.VarChar).Value="A1234"
   VbCommand.Parameters.Add("test2" ,OdbcType.Int).Value="1234"


   Dim ExecuteReturn As Integer = VbCommand.ExecuteNonQuery
   VbCommand.Cancel()
   VbConn.Close()
End If
詳細說明請參考:https://msdn.microsoft.com/zh-tw/library/zxdcah9t(v=vs.110).aspx

2017/09/30

[ADO.NET] VB.net 資料庫連線 III

接續前一篇 [ADO.NET] VB.net 資料庫連線 II 。 這一次要說明如何從資料庫取得資料


Dim VbConnectionString As String = "資料庫連線字串設定方式請參考 "VB.NET 資料庫連線語法 I

首先是使用DataReader來取得資料,DataReader適合在取得的資料量不多的情形下使用
Using VbConn As SqlClient.SqlConnection = New SqlClient.SqlConnection(VbConnectionString)

   VbConn.Open()

   Using VbCommand As SqlClient.SqlCommand = VbConn.CreateCommand
     VbCommand.CommandText="SELECT * FROM Test"

     Using VbReader As SqlClient.SqlDataReader=VbCommand.ExecuteReader
         Dim GetData As String=""
         Do While VbReader.Read
             GetData= VbReader.Item("欄位名稱")
         Loop
       End Using
       'DataReader 一次只取得一行資料庫的資料,所以必須自行整理取得的資料。

     VbCommand.Cancel()
   End Using

End Using

再來是使用DataSet來取得資料,DataSet適合在取得的大量資料的情形下使用。
Dim MyDataSet As New DataSet
Dim GetData As String=""
Using VbConn As SqlClient.SqlConnection = New SqlClient.SqlConnection(VbConnectionString)

   Using Adp As New System.Data.SqlClient.SqlDataAdapter("SELECT * FROM Test", VbConn)
     Adp.Fill(MyDataSet)
   End Using

End Using

For i = 0 To MyDataSet.Tables(0).Rows.Count - 1 Step 1
   GetData = MyDataSet.Tables(0).Rows(i).Item("欄位名稱")
Next
'實際上就是系統自動使用DataReader把資料放入DataSet裡,取得資料後在使用DataSet來操作資料。

DataSet是由多個DataTable所組成的資料集合,所以也可以直接使用DataTable來取的資料
Dim MyDataTable As New DataTable
Dim GetData As String=""
Using VbConn As SqlClient.SqlConnection = New SqlClient.SqlConnection(VbConnectionString)

   Using Adp As New System.Data.SqlClient.SqlDataAdapter("SELECT * FROM Test", VbConn)
     Adp.Fill(MyDataTable)
   End Using

End Using

For i = 0 To MyDataTable.Rows.Count - 1 Step 1
   GetData = MyDataTable.Rows(i).Item("欄位名稱")
Next

2017/09/29

[ADO.NET] VB.net 資料庫連線 II

上一篇 VB.NET 資料庫連線 I 是最基本的連線方法。

事實上還可以使用 using.. End Using的方式讓.net自行管理資料庫的連線資源的釋放。

Dim VbConnectionString As String = "資料庫連線字串設定方式請參考 "VB.NET 資料庫連線語法 I


Using VbConn As SqlClient.SqlConnection = New SqlClient.SqlConnection(VbConnectionString)
   VbConn.Open()

   Using VbCommand As SqlClient.SqlCommand = VbConn.CreateCommand
     VbCommand.CommandText="SELECT * FROM Test"
     Dim ExecuteReturn As Integer = VbCommand.ExecuteNonQuery
     VbCommand.Cancel()
   End Using

End Using

2017/09/28

[ADO.NET] VB.NET 資料庫連線 I

開發系統一定避不開資料庫的連線與操作,留下紀錄方便以後查詢。


Dim VbConn As New System.Data.SqlClient.SqlConnection
Dim VbConnectionString As String = "Data Source=資料庫主機;Network Library=DBMSSOCN;Initial Catalog=資料庫;User ID=資料庫帳號;Password=資料庫帳號登入密碼;"

If VbConn.State = ConnectionState.Closed Then
   VbConn.ConnectionString = VbConnectionString
   VbConn.Open()
   Dim VbCommand As System.Data.SqlClient.SqlCommand = VbConn.CreateCommand
   VbCommand.CommandText="SELECT * FROM Test"
   Dim ExecuteReturn As Integer = VbCommand.ExecuteNonQuery
   VbCommand.Cancel()
   VbConn.Close()
End If


說明:

1.上述的語法,紅色的字需要填入自己的資料庫主機資料。
2.如果VbConn是全域變數,可以在執行連線前嘗試檢查是否已在離線狀態,避免重複連線。