SQL Anywhere .NET
SQL Anywhere .NET 支持
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;
}
}
SQL Anywhere .NET的更多相关文章
- 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目
最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...
- SQL Server 大数据搬迁之文件组备份还原实战
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搬迁步骤(Procedure) 搬迁脚本(SQL Codes) ...
- Sql Server系列:分区表操作
1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一样的.使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性. 分区表是把数据按设 ...
- SQL Server中的高可用性(2)----文件与文件组
在谈到SQL Server的高可用性之前,我们首先要谈一谈单实例的高可用性.在单实例的高可用性中,不可忽略的就是文件和文件组的高可用性.SQL Server允许在某些文件损坏或离线的情况下,允 ...
- EntityFramework Core Raw SQL
前言 本节我们来讲讲EF Core中的原始查询,目前在项目中对于简单的查询直接通过EF就可以解决,但是涉及到多表查询时为了一步到位就采用了原始查询的方式进行.下面我们一起来看看. EntityFram ...
- 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...
- 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...
- 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...
- 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...
- SQL Server on Linux 理由浅析
SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...
随机推荐
- 5 -- Hibernate的基本用法 --5 2 持久化对象的状态
1. 瞬态 : 对象有new操作符创建,且尚未与Hibernate Session关联的对象被认为处于瞬态.瞬态对象不会被持久化到数据库中,也不会被赋予持久化标识.如果程序中失去了瞬态对象的引用,瞬态 ...
- 使用LevelListDrawable实现Html.fromHtml多张图片显示
stackoverflow网站果然强大,帮了我不少忙! http://stackoverflow.com/questions/16179285/html-imagegetter-textview 首先 ...
- 还有看不懂的java语句?
Person stuProxy= (Person) Proxy.newProxyInstance(Person.class.getClassLoader(), new Class<?>[] ...
- aspectj 注解
aspectj是一个面向切面编程的框架,即实现了aop,这不是spring,它本身很小,方便简洁,spring将其整合成自己的. 与spring本身对aop的支持不同,顾问采用正则表达式或者方法名或通 ...
- li下的ul----多级列表
<ul id="ul_Style1"> <li>第1级第1行</li> <li> <ul id="ul_Style2 ...
- nginx js、css、图片 及 一些静态文件中出现 http://upstreamname:port 导致部分网页样式显示不正常
nginx js.css.图片 及 一些静态文件中出现 http://upstreamname:port 导致部分网页样式显示不正常 http://upstreamname:port/....../. ...
- echarts x轴名称太长
echarts x轴名称太长了,隐藏一部分,鼠标移到名称上,显示全称 function extension(mychart, type) { let extension = document.getE ...
- 转载:Maplab开源VI-SLAM框架介绍
https://blog.csdn.net/ccfiricen/article/details/79089694
- tar命令参数详解
命令总览:tar [-]A --catenate --concatenate | c --create | d --diff --compare | r --append | t --list | u ...
- Writable序列化
序列化:将内存中的对象 转换成字节序列以便于存储在磁盘上或者用于网络传输. 反序列化:将磁盘或者从网络中接受到的字节序列,装换成内存中的对象. 自定义bean对象(普通java对象)要想序列化传输,必 ...