之前接触sybase还是在2年前,当时为了访问sybase数据库是通过安装客户端、建数据源的方法实现的,何其艰难,前段时间又一次来到了sybase的面前,这次从sybase网站下载到了c#下面的访问类库Sybase.Data.AseClient,直接引用就可以轻松的使用它所提供的一系列类和方法,和Oledb及sqlserver何其相似,不记得在那里看到过,说sqlserver就是来自于sybase卖给微软的数据库核心代码?难怪用起来很熟悉。
附封装了的数据库访问类源码,借鉴的PetShop来的。
using System;
using System.Configuration;
using System.Data;
using Sybase.Data.AseClient;
namespace FoodBook
{
public class SybaseHelper
{
public static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["SybaseConnString"].ConnectionString;
public SybaseHelper()
{
}
/// <summary>
/// 利用传入参数执行指定的查询语句并返回一个AseDataReader数据集
/// </summary>
/// <param name="strSql"></param>
/// <param name="OraclePara"></param>
/// <returns></returns>
public static AseDataReader ExecuteReader(string strSql, AseParameter[] AsePara)
{
AseConnection AseConn = new AseConnection(ConnectionString);
AseCommand AseComm = new AseCommand();
try
{
SetCommand(AseComm, AseConn, strSql, AsePara);
AseDataReader dr = AseComm.ExecuteReader(CommandBehavior.CloseConnection);
AseComm.Parameters.Clear();
return dr;
}
catch
{
AseConn.Close();
throw;
}
}
/// <summary>
/// 返回一个DataSet对象
/// </summary>
/// <param name="strSql"></param>
/// <param name="OleDbPara"></param>
/// <param name="tableName">表名称</param>
/// <returns>DataSet</returns>
public static DataSet ReturnDataSet(string strSql, AseParameter[] AsePara, string tableName)
{
DataSet dataSet = new DataSet(tableName);
AseDataAdapter Adapter = new AseDataAdapter();
AseConnection AseConn = new AseConnection(ConnectionString);
AseCommand AseComm = new AseCommand();
try
{
SetCommand(AseComm, AseConn, strSql, AsePara);
Adapter.SelectCommand = AseComm;
Adapter.Fill(dataSet, tableName);
AseComm.Parameters.Clear();
AseConn.Close();
return dataSet;
}
catch
{
AseConn.Close();
throw;
}
}
/// <summary>
/// 利用传入参数执行指定的语句并返回受影响的行数
/// </summary>
/// <param name="strSql"></param>
/// <param name="OraclePara"></param>
/// <returns>数字类型,受影响的行数</returns>
public static int ExecuteNonQuery(string strSql, AseParameter[] AsePara)
{
AseCommand AseComm = new AseCommand();
using (AseConnection AseConn = new AseConnection(ConnectionString))
{
SetCommand(AseComm, AseConn, strSql, AsePara);
int val = AseComm.ExecuteNonQuery();
AseComm.Parameters.Clear();
AseConn.Dispose();
AseConn.Close();
return val;
}
}
/// <summary>
/// 利用传入参数执行执行查询并返回第一行第一列的值
/// </summary>
/// <param name="strSql"></param>
/// <param name="OraclePara"></param>
/// <returns>object,第一行第一列的值</returns>
public static object ExecuteScalar(string strSql, AseParameter[] AsePara)
{
AseCommand AseComm = new AseCommand();
using (AseConnection AseConn = new AseConnection(ConnectionString))
{
SetCommand(AseComm, AseConn, strSql, AsePara);
object val = AseComm.ExecuteScalar();
AseComm.Parameters.Clear();
return val;
}
}
/// <summary>
/// 添加AseParameter参数到AseCommand对象
/// </summary>
/// <param name="AseComm"></param>
/// <param name="AseConn"></param>
/// <param name="strSql"></param>
/// <param name="AsePara"></param>
private static void SetCommand(AseCommand AseComm, AseConnection AseConn, string strSql, AseParameter[] AsePara)
{
if (AseConn.State != ConnectionState.Open)
AseConn.Open();
AseComm.Connection = AseConn;
AseComm.CommandText = strSql;
if (AsePara != null)
{
foreach (AseParameter Para in AsePara)
AseComm.Parameters.Add(Para);
}
}
}
}