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;
}
}