程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> ADO.NET數據處理核心技術

ADO.NET數據處理核心技術

編輯:關於.NET

1.引言

隨著Microsoft.NET面向網絡的新一代開發平台的誕生,給廣大編程人員提供了一個全新的開發環境。筆者就自己在運用ADO.NET進行數據庫編程中遇到的問題,與大家探討一下數據操作的關鍵技術、步驟與常見的錯誤。對.NET數據庫編程人員也許有一定的參考價值,避免類似錯誤的發生。

筆者在此主要就VisualBase.NET語法對SQL Server數據庫進行探討,但不對數據庫本身結構與如何存儲進行討論。僅就.NET語言編程對上述數據庫如何操作進行探討。

2.數據庫的連接

在ADO.NET中,對數據庫進行操作前必須對該數據庫進行連接。ADO.NET的數據提供者有:SQL Server.Net數據提供者只對SQL Server7.0及更高版SQL Server數據庫進行高度優化連接;另一種似乎萬能的數據提供者是OLE DB.NET,能處理所有與OLE DB兼容的數據源,甚至對於非關系型數據庫如:Excel電子表格,以及Oracle、DB2這樣的企業級關系型數據庫。第三數據提供者是ODBC.NET,必源首先建立DSN,但使用不多。

2.1運用SQL Server.Net數據提供者

=首先導入命名空間:Imsports namespace system.Data.SqlClient

=創建Connection對象:

SQL Server 提供兩種身份驗證模式來保護對服務器訪問的安全:Windows 身份驗證模式和混合模式。

Windows 身份驗證模式:

dim strCn as string= "server=SqlServerName;database=DataBaseName;integrated security=SSP"
Dim mySqlConnection as new SqlConnection(strCn)

在混合模式下:

dim strCn as string= "server= SqlServerName;database= DataBaseName;uid=sa;pwd=sa"
Dim mySqlConnection as new SqlConnection(strCn)

用完後務必關閉SqlConnection對象,調用SqlConnection的Close或Dispose方法。這兩種連接形式在不同的NET編程書籍並未合並一起進行說明,對於.Net程序員新手也許有一定困惑。對於"SqlServerName",若SqlServer服務器是本機,可以寫作"localhost";若SqlServer服務器不是本機,最好用要連接SqlServer服務器的IP地址。

2.2運用OLE DB.NET數據提供者: =首先導入命名空間:

Imsports namespace system.Datat
Imsports namespace system.Datat.OleDb
=創建Connection對象:
<連接Access數據庫:
Dim strCn as string ="provider=Microsoft.Jet.OLEDB.4.0;data " &" source=c:DataSourceNorthwind.mdb";
Dim myoleDbConnection As New OleDb.OleDbConnection(strCn)
<連接SQL Server數據庫:
Dim strCn As Sting="Provider=SQLOLEDB;Persist Security Info=False;Data Source= SqlServerName;Initial Catalog= DataBaseName;User ID=sa;Password=sa;"
Dim myoleDbConnection As New OleDb.OleDbConnection(strCn)

3.數據庫的操作方式

為了便於說明問題,我在Sqlserver數據庫服務器上建立一個測試數據庫Test,並在該數據庫上建立一個測試表Test,結構如下:

CREATE TABLE [dbo].[Test] (
       [TestID] [int] IDENTITY (1, 1) NOT NULL ,/*測試編號,自動加一 */
       [TestName] [varchar] (50)  NOT NULL , /*測試項目 */
[TestValue] [float] NOT NULL , /*測試值 */
       [Testdate] [datetime]  NOT NULL , /*測試日期 */
      [TestPerson] [char] (10) NOT NULL ,/*測試人 */
        primary key([TestID])
)

3.1 保持連接方式下的數據操作

在保持連接方式下利用Command執行SQL命令,以SqlCommand為例(OleDbcommand類似)提供了對數據庫操作的方法:

3.1.1使用命令INSERT、UPDATE與DELETE修改數據

以下代碼就是針對數據操作,運用SqlCommand執行SQL命令來添加數據記錄。

Dim MyConnection As New SqlConnection("server= YZJY-SNOWSNOWZHOU ;database=test;uid=zcq;pwd=731020")           
Dim Mycommand As New SqlCommand 
Mycommand.Connection = MyConnection
Mycommand.CommandType = CommandType.Text
Mycommand.CommandText = "Insert into Test ( TestName, TestValue,TestDate,TestPerson)values(@TestName,@TestValue,@TestDate,@TestPerson) "
Mycommand.Parameters.Add("@TestName", SqlDbType.VarChar, 50).Value = TxtTestName.Text
Mycommand.Parameters.Add("@TestValue", SqlDbType.Float).Value = TxtTestValue.Text
Mycommand.Parameters.Add("@TestDate", SqlDbType.DateTime).Value = DateTimePicker1.Value
Mycommand.Parameters.Add("@TestPerson", SqlDbType.Char, 10).Value = TxtTestperson.Text
Try
MyConnection.Open()
Mycommand.ExecuteNonQuery()
  ……
  MyConnection.Close()

以上語句為,為新加數據記錄的核心代碼。首先生成SQLCommand對象實例,進行設置SQLCommand對象的Connection 、CommandType與CommandText。其中CommandText屬性設置,必須要求我們熟悉SQL語句,SQLCommand命令參數的創建與賦值是較繁的部分,必須小心。以上語句具備通用性。同理可仿寫更新數據記錄、刪除數據記錄語句。

3.1.2如何ADO.NET中執行事務

在ADO.NET中開始一個數據庫事務步驟:首先調用SqlConnection對象的BeginTransaction方法返回一個SqlTransaction新的事務對象;確定要加入事務的SqlCommand對象,將這些SqlCommand對象組成一個邏輯單元,同時將SqlTransaction賦予SqlCommand對象的Transaction屬性;執行所有SqlCommand命令;若所的qlCommand命執行都成功,則調用SqlTransaction對象的Commit方法提交並完成事務;否則調用SqlTransaction對象的RollBackt方法來還原並取消事務。

MyConnection.Open()
Dim Mycommand As New SqlCommand
Dim MyTrans As SqlTransaction
MyTrans= MyConnection. BeginTransaction()
Mycommand。Connection =MyConnectiion
Mycommand。Transaction=Mytrans
‘開始事物,對數據庫進行添加記錄、刪除記錄操作
Try
Mycommand.CommandText = "Insert into Test ( TestName, TestValue,TestDate,TestPerson)values(@TestName,@TestValue,@TestDate,@TestPerson) "
……
Mycommand.ExecuteNonQuery()
Mycommand.CommandText = "delete from Test  where TestID=@TestID "
Mycommand.ExecuteNonQuery()
MyTrans.Commit()
Catch ex  AsException
MyTrans.Rollback()
Finally
MyConnection.Close()
End Try

3.2保持無連接方式下的數據操作

該方法主要利用SqlDataAdapter的Fill方法將數據填充到客戶端的DataSet 數據集中,填充後與數據源斷開。在客戶端對DataSet中的記錄表進行浏覽、插入、修改、刪除,操作完成後如需更新數據庫,再利用SqlDataAdapter的UpDate方法將DataSet中數據表處理的結果更新到SQL數據庫中。往往適用於對數據表進行繁雜操作或長時間交互處理。這種方式在一些編程書籍介紹較多,本人只想對向SQL數據庫記錄操作的主要步驟作以說明。

Dim MySqlataAdapter  As SqlDataAdapter
Dim MyDataSet As DataSet
Dim strSql  As string="select * from Test"
MySqlDataAdapter=New SqlDataAdapter(srtSql,Myconnection)
Dim objBc As New SqlCommandBuilder(MySqlDataAdapter)
……
‘對Dataset表中數據數據進行處理
MyDataAdapter.Update(MyDataSet,"TableName")
MyDataSe.AcceptChanges()

在以上操作中,我們重點介紹一下SqlCommandBuilder對象能夠據創建SqlataAdapter對象過程中指定的select語句,基於SQL Update、SQL Insert、SQL Delete語句構造出SqlCommand對象,並將對象賦予DataAdapter的UpdateCommand、InsertCommand、DeleteCommand屬性。只適用以下情況:更新單個數據庫表中的記錄。用於生DataAdapter對象的Select語句,必須返回一個包含唯一識別記錄的列。DataAdapter的SelectCommand屬性不能發生變化。但當DataAdapter對象是從是多個關聯的表中檢索出的記錄時,就不能使用qlCommandBuilder類了,必需手寫SQLCommand對象賦予DataAdapter對象的相關的命令屬性,這樣會比較繁。關於這一點,相關書籍介紹到的很少希望讀者能夠重視。

4 結束語

ADO.NET與常用的2種數據庫連接方式進行了介紹。ADO.NET對數據的處理分為:保持連接狀態的數據操作和無連接狀態的數據操作。保持連接狀態的數據操作適合對數據快速處理,無連接狀態的數據操作適用於用戶長時間對部分數據記錄進行處理。無連接狀態的數據操作更新數據時必須構造DataAdapter更新命令的UpdateCommand、InsertCommand、DeleteCommand命令屬性。據本人在寫程序的過程中總結出的一些經驗之談,在此願與大家分享,也許對大家有所幫助。大家只有編程的過程才能體會到成功的快樂,就會得到許多書本上找不到的發現。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved