using System;
using System.Configuration;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
namespace LinkDataBase
{
/// <summary>
/// 功能:根据config中定义的dsn来连接数据库,运行SQL语句。
/// 说明:都是静态方法,不能被继承。
/// 编码:Linker.cher
/// 时间:2006年8月26日
/// </summary>
public sealed class LinkDB
{
#region 自定义变量
private static Hashtable MyConnHT = new Hashtable(); //存放连接字符串
private static string connKey = "dsn"; //连接字符串在.config里面的Key前缀
private static string connStr; //连接字符串
private static SqlConnection myConnection; //数据库连接
private static SqlCommand myCommand; //数据库操作
private static SqlDataAdapter sda; //用于填充DataSet
#endregion
#region 清理资源
public static void Dispose()
{
if (myCommand != null)
{
myCommand.Dispose();
}
if (myConnection != null)
{
myConnection.Close();
myConnection.Dispose();
}
}
#endregion
#region 填充MyConnHT
/// <summary>
/// 功能:MyConnHT为空则为MyConnHT中间添加数据
/// </summary>
private static void ReadconnectionStr()
{
if (MyConnHT.Count == 0)
{
if (ConfigurationSettings.AppSettings[connKey] != null)
{
MyConnHT.Add(connKey,ConfigurationSettings.AppSettings[connKey]);
}
for (int i = 1; ; i++)
{
if (ConfigurationSettings.AppSettings[connKey + i.ToString()] != null)
{
MyConnHT.Add(connKey + i.ToString(),ConfigurationSettings.AppSettings[connKey + i.ToString()]);
}
else
{
break;
}
}
if (MyConnHT.Count == 0)
{
throw new Exception(".config文件中,没有连接字符串存在。不能连接数据库!");
}
}
}
#endregion
#region 查找MyConnHT中的ConnectionStr
/// <summary>
/// 功能:查找连接字符串,i为0时候是dsn,i为1时候是dsn1
/// </summary>
/// <param name="i">i:连接字符串的位置</param>
private static string GetConnectionStr(int i)
{
string result;
ReadconnectionStr(); //确定存在连接字符串
if (i == 0)
{
if (MyConnHT[connKey] == null)
{
throw new Exception("不存在你需要的连接的字符串!");
}
else
{
result = (string)MyConnHT[connKey];
}
}
else
{
if (MyConnHT[connKey + i.ToString()] == null)
{
throw new Exception("不存在你需要的连接的字符串!");
}
else
{
result = (string)MyConnHT[connKey + i.ToString()];
}
}
return result;
}
#endregion
#region 执行SQL语句,返回影响行数
/// <summary>
/// 功能:在指定连接上执行SQL语句。
/// </summary>
/// <param name="SQLStr">SQLStr:需要运行的SQL语句</param>
/// <param name="ConnectionStr">ConnectionStr:数据库连接字符串</param>
/// <returns></returns>
public static int SQLManipulate(string SQLStr,string ConnectionStr)
{
connStr = ConnectionStr;
myConnection = new SqlConnection(connStr); //配置myConnection
int intNumber = 0;
try
{
myConnection.Open(); //打开连接
}
catch
{
throw new Exception("连接不上数据库!请确认数据库连接字符串是否能正确连接数据库!");
}
myCommand = new SqlCommand(SQLStr, myConnection);//设置SQL语句和连接
try
{
intNumber = myCommand.ExecuteNonQuery();
}
catch(SqlException eer)
{
throw new Exception(eer.Message);
}
finally
{
myCommand.Dispose();
myConnection.Close();
myConnection.Dispose();
}
return intNumber;
}
/// <summary>
/// 功能:在指定连接上执行SQL语句。
/// 等价:i=0 相当于使用dsn, i=1 相当于使用dsn1
/// </summary>
/// <param name="SQLStr">SQLStr:需要运行的SQL语句</param>
/// <param name="i">i:连接字符串的位置</param>
/// <returns></returns>
public static int SQLManipulate(string SQLStr,int i)
{
return SQLManipulate(SQLStr, GetConnectionStr(i));
}
/// <summary>
/// 功能:在dsn连接上执行SQL语句。
/// </summary>
/// <param name="SQLStr">SQLStr:需要运行的SQL语句</param>
/// <returns></returns>
public static int SQLManipulate(string SQLStr)
{
return SQLManipulate(SQLStr, 0);
}
#endregion
#region 执行SQL语句,取出数据到DataSet中
/// <summary>
/// 功能:在指定连接上执行SQL语句,用于取数据。
/// </summary>
/// <param name="SQLStr">SQLStr:需要运行的SQL语句</param>
/// <param name="ConnectionStr">ConnectionStr:数据库连接字符串</param>
/// <returns></returns>
public static DataSet SQLReadOut(string SQLStr,string ConnectionStr)
{
connStr = ConnectionStr;
myConnection = new SqlConnection(connStr); //配置myConnection
DataSet ds = new DataSet();
try
{
myConnection.Open(); //打开连接
}
catch
{
throw new Exception("连接不上数据库!请确认数据库连接字符串是否能正确连接数据库!");
}
sda = new SqlDataAdapter(SQLStr, myConnection); //设置SQL语句和连接
try
{
sda.Fill(ds); //执行SQL语句,将数据填充到ds中间
}
catch
{
throw new Exception("读取数据失败,请确认SQL语句的正确性!");
}
return ds;
}
/// <summary>
/// 功能:在指定连接上执行SQL语句,用于取数据,连接字符串已存在于.config文件中
/// 调用:如:SQLReadOut("select * from student", 0);
/// 等价:使用dsn这个连接字符串,1等价为dsn1这个连接字符串,依此类推。
/// </summary>
/// <param name="SQLStr">SQLStr:需要运行的SQL语句</param>
/// <param name="i">i:连接字符串的位置</param>
/// <returns></returns>
public static DataSet SQLReadOut(string SQLStr,int i)
{
return SQLReadOut(SQLStr, GetConnectionStr(i));
}
/// <summary>
/// 功能:在指定连接上执行SQL语句,用于取数据,连接字符串已存在于.config文件中
/// 调用:如:SQLReadOut("select * from student");
/// 等价:使用dsn这个连接字符串
/// </summary>
/// <param name="SQLStr">SQLStr:需要运行的SQL语句</param>
/// <returns></returns>
public static DataSet SQLReadOut(string SQLStr)
{
return SQLReadOut(SQLStr, 0);
}
#endregion
#region 执行SQL语句,取出数据到SqlDataReader中
/// <summary>
/// 功能:在指定连接上执行SQL语句,用于读数据
/// </summary>
/// <param name="SQLStr">SQLStr:需要运行的SQL语句</param>
/// <param name="ConnectionStr">ConnectionStr:数据库连接字符串</param>
/// <returns></returns>
public static SqlDataReader SQLRead(string SQLStr,string ConnectionStr)
{
connStr = ConnectionStr;
myConnection = new SqlConnection(connStr); //配置myConnection
SqlDataReader sdr;
try
{
myConnection.Open(); //打开连接
}
catch
{
throw new Exception("连接不上数据库!请确认数据库连接字符串是否能正确连接数据库!");
}
myCommand = new SqlCommand(SQLStr, myConnection);//设置SQL语句和连接
try
{
sdr = myCommand.ExecuteReader(); //执行SQL语句,并读出数据
}
catch
{
throw new Exception("读取数据失败,请确认SQL语句的正确性!");
}
return sdr;
}
/// <summary>
/// 功能:在指定连接上执行SQL语句,用于读数据,连接字符串已存在于.config文件中
/// 调用:如:SQLRead("select * from student", 0);
/// 等价:使用dsn这个连接字符串,1等价为dsn1这个连接字符串,依此类推。
/// </summary>
/// <param name="SQLStr">SQLStr:需要运行的SQL语句</param>
/// <param name="i">i:连接字符串的位置</param>
/// <returns></returns>
public static SqlDataReader SQLRead(string SQLStr,int i)
{
return SQLRead(SQLStr, GetConnectionStr(i));
}
/// <summary>
/// 功能:在指定连接上执行SQL语句,用于读数据,连接字符串已存在于.config文件中
/// 调用:如:SQLRead("select * from student");
/// 等价:使用dsn这个连接字符串
/// </summary>
/// <param name="SQLStr">SQLStr:需要运行的SQL语句</param>
/// <returns></returns>
public static SqlDataReader SQLRead(string SQLStr)
{
return SQLRead(SQLStr, 0);
}
#endregion
}
}