.NET 開發中SQL Anywhere 數據庫的使用介紹


1、ADO.NET 是 Microsoft 的 ODBC、OLE DB 和 ADO 系列中最新的數據訪問 API。它是 Microsoft .NET Framework數據訪問組件,可用於訪問關係數據庫系統。

2、SQL Anywhere .NET 數據提供程序實現了 iAnywhere.Data.SQLAnywhere 命名空間,允許您使用支持 .NET 的任何語言(例如 C# 和 Visual Basic .NET)編寫程序,並從 SQL Anywhere 數據庫訪問數據。

 

SQL Anywhere .NET 數據提供程序功能

SQL Anywhere 支持 Microsoft .NET Framework 版本 2.0、3.0、3.5 和 4.0。提供三個不同的命名空間:

1、iAnywhere.Data.SQLAnywhere ADO.NET 對象模型是通用數據訪問模型。

2、System.Data.Oledb 此命名空間支持 OLE DB 數據源。

3、System.Data.Odbc 此命名空間支持 ODBC 數據源。

 

使用 SQL Anywhere .NET程序具有優點:

在 .NET 環境中,SQL Anywhere .NET 程序提供對 SQL Anywhere 的本地訪問。它直接與 SQL Anywhere 服務器進行通信而不需要使用 Bridge 技術。因此,SQL Anywhere .NET 數據提供程序比 OLE DB 和 ODBC 數據提供程序速度更快。建議使用此程序訪問 SQL Anywhere 數據庫。

 

在 Visual Studio 項目中使用 .NET程序

使用 SQL Anywhere .NET程序和 Visual Studio 開發 .NET 應用程序,方法是在源代碼中添加 SQL Anywhere .NET程序的引用,以及一行引用該 SQL Anywhere .NET程序類的語句。

步驟:

1、啓動 Visual Studio 並打開項目。

2、在 [解決方案資源管理器] 窗口中,右擊 [引用],然後單擊 [添加引用]。

引用將指示要包含哪些提供程序並定位 SQL Anywhere .NET 數據提供程序的代碼。

單擊 [.NET] 選項卡,滾動列表以定位以下之一:

iAnywhere.Data.SQLAnywhere (.NET 2)

iAnywhere.Data.SQLAnywhere (.NET 3.5)

iAnywhere.Data.SQLAnywhere (.NET 4)

注意:缺省位置是 %SQLANY12%\CE\Assembly\V2

3、單擊所需的提供程序,然後單擊 [OK]。提供程序將添加到項目的 [解決方案資源管理器] 窗口的 [引用] 文件夾中。

4、向源代碼指定一條指令,以幫助使用 SQL Anywhere .NET 數據提供程序命名空間以及在其中定義的類型。

在項目添加下面的指令行:

使用的是 C#,請將以下行添加到項目開始處的 using 指令列表中:

using iAnywhere.Data.SQLAnywhere;

 

 

SQL Anywhere .NET程序系統要求

在計算機或手持式設備上安裝以下項目:

.NET Framework 和/或 .NET Compact Framework 2.0 版或更高版本。

Visual Studio 2005 或更高版本,或者 .NET 語言編譯器,例如 C#(僅開發時需要)。

 

SQL Anywhere .NET程序必需的文件

SQL Anywhere .NET 數據提供程序代碼位於每個平臺的 DLL 中。

 

Windows 所需的文件

對於 Windows(除 Windows Mobile 外),需要以下 DLL 之一:

%SQLANY12%\V2\Assembly\V2\iAnywhere.Data.SQLAnywhere.dll

%SQLANY12%\V2\Assembly\V3.5\iAnywhere.Data.SQLAnywhere.v3.5.dll

%SQLANY12%\V2\Assembly\V4\iAnywhere.Data.SQLAnywhere.v4.0.dll

DLL 的選擇取決於面向的 .NET 的版本。

提供程序的 Windows 版本還需要以下 DLL。

policy.12.0.iAnywhere.Data.SQLAnywhere.dll策略文件可用於替換創建應用程序的提供程序版本。只要發佈了關於提供程序的更新,Sybase 就會更新策略文件。也有用於 3.5 版的提供程序的策略文件 (policy.12.0.iAnywhere.Data.SQLAnywhere.v3.5.dll),以及用於 4.0 版的提供程序的策略文件 (policy.12.0.iAnywhere.Data.SQLAnywhere.v4.0.dll)。

dblgen12.dll該語言 DLL 包含了提供程序發出的英文 (en) 消息。還可使用很多其它語種,包括漢語 (zh)、法語 (fr)、德語 (de) 和日語 (jp)。

dbcon12.dll此 DLL 包含 [Connect to SQL Anywhere] 窗口支持代碼。

 

連接到數據庫

1、使用以下代碼創建名爲 [conn] 的 SAConnection 對象:

SAConnection conn = new SAConnection(connection-string);

   Using(SAConnection conn = new SAConnection(connection-string))

   {};

注: using語句確保使用 IDisposable 對象接口的對象可以方便釋放。

2、打開一個與數據庫的連接。

   conn.Open();

3、關閉與數據庫

   Conn. Close();

 

訪問和操作數據

SQL Anywhere .NE提供兩種方法訪問數據:

SACommand 對象

SACommand 對象允許用戶直接從數據庫檢索或修改數據的SQL語句及調用存儲過程。

SACommand 對象中,SADataReader 用於從查詢或存儲過程返回只讀結果集。SADataReader 每次僅返回一行,但這並不會降低性能,因爲 SQL Anywhere 客戶端的庫使用預取緩衝每次預取多行。

使用 SACommand 對象可以將更改組合成事務,而不是在自動提交模式下操作。使用 SATransaction 對象時,會將行鎖定,這樣其他用戶便無法對其進行修改。

 

SADataAdapter 對象

SADataAdapter 對象會將整個結果集檢索到一個 DataSet 中。DataSet 是用於保存從數據庫檢索到的數據的斷開連接的存儲區。之後可以編輯 DataSet 中的數據,編輯完成後,SADataAdapter 對象利用對 DataSet 所做的更改更新數據庫。使用 SADataAdapter 時,無法阻止其他用戶修改 DataSet 中的行。您需要在應用程序中包含用於解決可能出現的任何衝突的邏輯。

 

使用 SACommand 對象訪問數據

使用 SACommand 對象可針對 SQL Anywhere 數據庫執行 SQL 語句或調用存儲過程。

可以使用下列方法中的任一種檢索數據庫中的數據:

ExecuteReader發出返回結果集的 SQL 查詢。此方法使用只進、只讀遊標。可以沿一個方向快速循環遍歷結果集中的行。

ExecuteScalar發出返回單個值的 SQL 查詢。可以是結果集的第一行中的第一列,或返回集合值(如 COUNT 或 AVG)的 SQL 語句。此方法使用只進、只讀遊標。

 

使用 SACommand 對象操作數據

使用 SACommand 對象執行插入、更新或刪除,請使用 ExecuteNonQuery 函數。ExecuteNonQuery 函數發出一個不返回結果集的查詢(SQL 語句或存儲過程)。

 

注意:‘1’ or ‘1’ = ‘1’的查詢漏洞問題。

//拼字符串

cmd.CommandText = "SELECT id FROM \"user\" where name = "+ name ;

 

//解決方法 命名參數

cmd.CommandText = "SELECT id FROM \"user\" where name = :name";

cmd.Parameters.Add("name", name);

 

SADataAdapter 對象訪問和操作數據

使用 SADataAdapter 可查看整個結果集,使用 Fill 方法將查詢結果填充到此 DataTable 中。

使用 DataTable 的示例

SAConnection conn = new SAConnection("Data Source=DMIS");
conn.Open();
DataTable dt = new DataTable("Results");
SADataAdapter da = new SADataAdapter("SELECT * FROM Employees", conn);
da.Fill(dt);
conn.Close();

使用 DataSet示例

SAConnection conn = new SAConnection(" Data Source=DMIS");
conn.Open();
DataSet ds = new DataSet();
SADataAdapter da = new SADataAdapter("SELECT * FROM Employees", conn); //能保存整個結果集,對結果集中記錄數沒有限制
da.Fill(ds, "Results");
conn.Close();
dataGridView1.DataSource = ds.Tables["Results"];

 

數據庫鏈接字符串

在Web.config文件添加

<connectionStrings>

<add name="ConnString" connectionString="Dsn=webdata;uid=user;pwd=password"/>

</connectionStrings>

 

在.cs文件中引用ConnString

ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;

 

數據庫中的NULL

在數據庫字段中的NULL值並不等同於C#中NULL值。

數據庫字段中的NULL值,在C#中與DBNull.Value值對應。

可以使用下面函數進行轉換:

//判斷DBNull值

public object IsDbNull(object DbValue)

{

if (Convert.IsDBNull(DbValue))

{

object value = null;

return value;

}

else

{

return DbValue;

}

}


發佈了59 篇原創文章 · 獲贊 28 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章