using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Data.Common;
using IBM.Data.DB2;
using System.Data;
namespace ConsoleApplication1
{
/// <summary>
/// DB链接基类
/// </summary>
public abstract class DbConnectionBase
{
public DbConnectionBase() { }
/// <summary>
/// 数据库链接字符串
/// </summary>
protected string m_dbConnStr;
/// <summary>
/// 错误代码
/// </summary>
protected string m_errMsg;
public void SetConnectionString(string connStr)
{
this.m_dbConnStr = connStr;
}
public string GetErrMsg()
{
return m_errMsg;
}
/// <summary>
/// 打开数据库链接
/// </summary>
public abstract void Open();
/// <summary>
///关闭数据库链接
/// </summary>
public abstract void Close();
}
/// <summary>
/// DB2链接适配器,各类数据库链接依照DB2数据库扩展即可
/// </summary>
public class Db2Connection:DbConnectionBase
{
/// <summary>
/// 真正起作用的即为该DB2链接
/// </summary>
private DB2Connection m_db2Conn;
public Db2Connection()
{
m_db2Conn = new DB2Connection();
}
public override void Open()
{
try
{
//if(string.IsNullOrEmpty(m_dbConnectionString) || string.IsNullOrEmpty(m_dbConnectionString.Trim()))
//{
// m_errMsg = "链接字符串为空";
// return;
//}
m_db2Conn.ConnectionString = m_dbConnStr;
m_db2Conn.Open();
}
catch(Exception ex)
{
m_errMsg = ex.Message;
m_errMsg += "\n";
m_errMsg += ex.StackTrace;
}
}
public override void Close()
{
m_db2Conn.Close();
}
public DB2Connection GetRawConn()
{
return m_db2Conn;
}
}
/// <summary>
/// 数据库链接池基类
/// </summary>
/// <typeparam name="TDbConn"></typeparam>
public abstract class DbConnPool<TDbConn> where TDbConn : DbConnectionBase
{
/// <summary>
/// 数据库链接字符串
/// </summary>
protected string m_dbConnStr = string.Empty;
/// <summary>
/// 数据库链接池容器
/// </summary>
private Stack<TDbConn> m_lstConn = new Stack<TDbConn>();
/// <summary>
/// 信号量
/// </summary>
private Semaphore m_sem;
/// <summary>
/// 链接保活的数量,默认为1个
/// </summary>
private int m_keepAliveNum = 1;
/// <summary>
/// 连接池支持最大的连接数量
/// </summary>
private int m_maxConnNum = 10;
/// <summary>
/// 错误信息
/// </summary>
protected string m_errMsg;
/// <summary>
/// 是否已经初始化标记
/// </summary>
private bool m_bInit = false;
//private static object m_mutex = new object();
/// <summary>
/// 初始化锁类
/// </summary>
private static object m_iniMutex = new object();
public string GetErrMsg()
{
return m_errMsg;
}
public void SetDbConnStr(string connStr)
{
if (string.IsNullOrEmpty(m_dbConnStr))
{
this.m_dbConnStr = connStr;
}
}
public void SetAliveConnNum(int keepAliveNum)
{
this.m_keepAliveNum = keepAliveNum;
}
public void SetMaxConnNum(int maxNum)
{
this.m_maxConnNum = maxNum;
}
/// <summary>
/// 创建打开链接,需要子类实现
/// </summary>
/// <returns></returns>
public abstract TDbConn CreateOpenConn();
/// <summary>
/// 初始化
/// </summary>
/// <returns></returns>
public bool Init()
{
if (!m_bInit)
{
lock (m_iniMutex)
{
if (!m_bInit)
{
for (int i = 0; i < m_keepAliveNum; i++)
{
TDbConn dbConn = CreateOpenConn();
if (null == dbConn)
{
m_errMsg = "初始化生成数据库链接失败";
return false;
}
m_lstConn.Push(dbConn);
}
m_bInit = true;
m_sem = new Semaphore(m_maxConnNum, m_maxConnNum);
if (null == m_sem)
{
m_errMsg = "初始化生成数据库链接信号量失败";
return false;
}
}
}
}
return true;
}
public TDbConn GetConn()
{
try
{
if (!Init())
{
return null;
}
}
catch(Exception ex)
{
m_errMsg = ex.Message;
m_errMsg += "\n";
m_errMsg += ex.StackTrace;
}
m_sem.WaitOne();
if (m_lstConn.Count > 0)
{
return m_lstConn.Pop();
}
return CreateOpenConn();
}
public void PutConn(TDbConn dbConn)
{
if (m_lstConn.Count > m_keepAliveNum)
{
dbConn.Close();
}
else
{
m_lstConn.Push(dbConn);
}
m_sem.Release();
}
public void Dispose()
{
while (true)
{
TDbConn dbConn = m_lstConn.Pop();
if (dbConn != null)
{
//Console.WriteLine("关闭释放链接...");
dbConn.Close();
}
else
{
break;
}
}
}
}
/// <summary>
/// DB2数据库连接池,可以扩展其他数据库连接池
/// </summary>
public class Db2ConnPool : DbConnPool<Db2Connection>
{
/// <summary>
/// DB2链接池单例模式
/// </summary>
private static Db2ConnPool instance;
private static object m_mutex = new object();
private Db2ConnPool(){}
public static Db2ConnPool GetInstance()
{
if (instance == null)
{
lock (m_mutex)
{
if (instance == null)
{
instance = new Db2ConnPool();
}
}
}
return instance;
}
public override Db2Connection CreateOpenConn()
{
Db2Connection dbConn;
try
{
dbConn = new Db2Connection();
dbConn.SetConnectionString(m_dbConnStr);
//Console.WriteLine("生成一个新链接了。。。");
dbConn.Open();
//Console.WriteLine("链接打开了");
}
catch (Exception ex)
{
m_errMsg = ex.Message;
m_errMsg += "\n";
m_errMsg += ex.StackTrace;
return null;
}
return dbConn;
}
}
#region 注释掉代码
//public interface IDbConnectionBase
//{
//}
//public interface IDbConnPool<TDBConn>
//{
// //bool Init();
// //TDBConn CreateOpenConn();
// TDBConn GetConn();
// void PutConn(TDBConn dbConn);
//}
//public interface IDbConn
//{
//}
//public class Db2Connection : DbConnectionBase
//{
// public override void Open()
// {
// throw new NotImplementedException();
// }
// public override void Close()
// {
// throw new NotImplementedException();
// }
//}
//public class Db2ConnPool:IDisposable
//{
// private static Db2ConnPool instance;
// private static object m_mutex = new object();
// private static object m_iniMutex = new object();
// //private List<DB2Connection> m_lstConn;
// private Stack<DB2Connection> m_lstConn;
// private string m_dbConneStr;
// private Semaphore m_sem;
// private int m_keepAliveNum;
// private int m_maxConnNum;
// private bool m_bInit;
// private string m_errMsg;
// public string GetErrMsg()
// {
// return m_errMsg;
// }
// private Db2ConnPool()
// {
// m_lstConn = new Stack<DB2Connection>();
// m_keepAliveNum = 1;
// m_maxConnNum = 10;
// m_bInit = false;
// //m_sem = new Semaphore(m_minConnNum, m_MaxConnNum);
// }
// public static Db2ConnPool GetInstance()
// {
// if (instance == null)
// {
// lock (m_mutex)
// {
// if (instance == null)
// {
// instance = new Db2ConnPool();
// }
// }
// }
// return instance;
// }
// public DB2Connection GetConn()
// {
// try
// {
// if (!Init())
// {
// return null;
// }
// }
// catch
// {
// return null;
// }
// m_sem.WaitOne();
// if (m_lstConn.Count > 0)
// {
// return m_lstConn.Pop();
// }
// return CreateOpenConn();
// }
// public void PutConn(DB2Connection dbConn)
// {
// if (m_lstConn.Count > m_keepAliveNum)
// {
// dbConn.Close();
// }
// else
// {
// m_lstConn.Push(dbConn);
// }
// m_sem.Release();
// }
// public DB2Connection CreateOpenConn()
// {
// DB2Connection dbConn;
// try
// {
// dbConn = new DB2Connection();
// dbConn.ConnectionString = m_dbConneStr;
// //Console.WriteLine("生成一个新链接了。。。");
// dbConn.Open();
// //Console.WriteLine("链接打开了");
// }
// catch (Exception ex)
// {
// m_errMsg = ex.Message;
// m_errMsg += "\n";
// m_errMsg += ex.StackTrace;
// return null;
// }
// return dbConn;
// }
// public bool Init()
// {
// if (!m_bInit)
// {
// lock (m_iniMutex)
// {
// if (!m_bInit)
// {
// for (int i = 0; i < m_keepAliveNum; i++)
// {
// DB2Connection dbConn = CreateOpenConn();
// if (null == dbConn)
// {
// m_errMsg = "初始化生成数据库链接失败";
// return false;
// }
// m_lstConn.Push(dbConn);
// }
// m_bInit = true;
// m_sem = new Semaphore(m_maxConnNum, m_maxConnNum);
// if (null == m_sem)
// {
// m_errMsg = "初始化生成数据库链接信号量失败";
// }
// }
// }
// }
// return true;
// }
// public void Dispose()
// {
// while (true)
// {
// DB2Connection dbConn = m_lstConn.Pop();
// if (dbConn != null)
// {
// //Console.WriteLine("关闭释放链接...");
// dbConn.Close();
// }
// else
// {
// break;
// }
// }
// }
// public void SetDbConnStr(string connStr)
// {
// this.m_dbConneStr = connStr;
// }
// public void SetMinConnNum(int keepAliveNum)
// {
// this.m_keepAliveNum = keepAliveNum;
// }
// public void SetMaxConnNum(int maxNum)
// {
// this.m_maxConnNum = maxNum;
// }
//}
//public abstract class DbManager
//{
// //public abstract DataSet QueryData(string qrySql, Dictionary<string, string> dicInParams);
//}
//public interface IDbExcutor<TModel>
//{
//}
//public interface IMapper<TModel>
//{
// public List<TModel> Mapper(DB2DataReader reader);
//}
//public abstract class DbManager<TModel>
//{
// private IMapper<TModel> m_mapper;
// public void SetMapper(IMapper<TModel> mapper)
// {
// this.m_mapper = mapper;
// }
// public abstract List<TModel> ExecuteQuery();
// public abstract bool ExecuteNonQuery();
//}
#endregion
public class CDb2Parameter
{
/// <summary>
/// 参数名称
/// </summary>
public string ParamName { get; set; }
/// <summary>
/// 参数大小
/// </summary>
public int ParamSzie { get; set; }
/// <summary>
/// 参数类型
/// </summary>
public DB2Type ParamType { get; set; }
/// <summary>
/// 参数值
/// </summary>
public object ParamValue { get; set; }
public CDb2Parameter(string name,int size,DB2Type type,object val)
{
this.ParamName = name;
this.ParamSzie = size;
this.ParamType = type;
this.ParamValue = val;
}
}
/// <summary>
/// DB2输入参数
/// </summary>
public class CDB2ExecutorInParam
{
/// <summary>
/// SQL语句
/// </summary>
public string CommandText { get; set; }
/// <summary>
/// 命令类型
/// </summary>
public CommandType CommandType { get; set; }
/ <summary>
/ 是否返回reader
/ </summary>
//public bool IsRetReader { get; set; }
/ <summary>
/ 查询数据库Reader
/ </summary>
//public DB2DataReader reader { get; set; }
/// <summary>
/// 参数
/// </summary>
public List<CDb2Parameter> Params;
public void AddParameter(string name, DB2Type type, int size,object val)
{
if(Params == null)
{
Params = new List<CDb2Parameter>();
}
Params.Add(new CDb2Parameter(name, size, type, val));
}
}
/// <summary>
/// DB2输出参数
/// </summary>
public class CDB2ExecutorOutParam
{
/// <summary>
/// 错误代码
/// </summary>
public int ErrorCode { get; set; }
/// <summary>
/// 错误信息
/// </summary>
public string ErrorMsg { get; set; }
/// <summary>
/// 是否返回reader
/// </summary>
public bool IsRetReader { get; set; }
/// <summary>
/// 查询数据库Reader
/// </summary>
public DB2DataReader Reader { get; set; }
/// <summary>
/// DB2操作命令
/// </summary>
public DB2Command Command { get; set; }
/// <summary>
/// DB2链接
/// </summary>
public Db2Connection Db2Conn { get; set; }
/// <summary>
/// 更新数据时影响到的行数
/// </summary>
public int ChangeRows { get; set; }
public CDB2ExecutorOutParam()
{
Command = new DB2Command();
ErrorCode = 0;
}
}
public abstract class DBExcutorBase
{
/// <summary>
/// 错误信息
/// </summary>
protected string m_errMsg;
/// <summary>
/// 链接信息
/// </summary>
protected string m_connStr;
/// <summary>
/// 获取错误信息
/// </summary>
/// <returns></returns>
public string GetErrMsg()
{
return m_errMsg;
}
/// <summary>
/// 设置链接字符串
/// </summary>
/// <param name="connStr"></param>
public void SetConnStr(string connStr)
{
this.m_connStr = connStr;
}
public abstract CDB2ExecutorOutParam ExecuteQuery(CDB2ExecutorInParam inParam);
public abstract CDB2ExecutorOutParam ExecuteNonQuery(CDB2ExecutorInParam inParam);
}
public class Db2Excutor:DBExcutorBase
{
private Db2Excutor() { }
private static Db2Excutor instance = null;
private static object m_mutext = new object();
public static Db2Excutor GetInstance()
{
if(instance == null)
{
lock(m_mutext)
{
if(instance == null)
{
instance = new Db2Excutor();
}
}
}
return instance;
}
public void ReleaseDB2Executor(CDB2ExecutorOutParam outParam)
{
if(outParam.IsRetReader)
{
outParam.Reader.Close();
outParam.Reader = null;
}
outParam.Command.Parameters.Clear();
Db2ConnPool.GetInstance().PutConn(outParam.Db2Conn);
outParam.Db2Conn = null;
}
public override CDB2ExecutorOutParam ExecuteQuery(CDB2ExecutorInParam inParam)
{
CDB2ExecutorOutParam outParam = new CDB2ExecutorOutParam();
DB2Command command = outParam.Command;
Db2ConnPool dbPool = Db2ConnPool.GetInstance();
dbPool.SetDbConnStr(m_connStr);
Db2Connection db2Conn = dbPool.GetConn();
if (db2Conn == null)
{
outParam.ErrorCode = -1;
outParam.ErrorMsg = dbPool.GetErrMsg();
return outParam;
}
outParam.Db2Conn = db2Conn;
command.Connection = db2Conn.GetRawConn();
command.CommandType = inParam.CommandType;
command.CommandText = inParam.CommandText;
int nLen = inParam.Params.Count;
for (int i = 0; i < nLen; i++)
{
DB2Parameter item = new DB2Parameter(inParam.Params[i].ParamName, inParam.Params[i].ParamType, inParam.Params[i].ParamSzie);
item.Value = inParam.Params[i].ParamValue;
command.Parameters.Add(item);
}
outParam.IsRetReader = true;
try
{
outParam.Reader = command.ExecuteReader();
}
catch (Exception ex)
{
m_errMsg = ex.Message;
m_errMsg += "\n";
m_errMsg += ex.StackTrace;
outParam.ErrorCode = -1;
outParam.ErrorMsg = m_errMsg;
}
return outParam;
}
public override CDB2ExecutorOutParam ExecuteNonQuery(CDB2ExecutorInParam inParam)
{
CDB2ExecutorOutParam outParam = new CDB2ExecutorOutParam();
DB2Command command = outParam.Command;
Db2ConnPool dbPool = Db2ConnPool.GetInstance();
dbPool.SetDbConnStr(m_connStr);
Db2Connection db2Conn = dbPool.GetConn();
if (db2Conn == null)
{
outParam.ErrorCode = -1;
outParam.ErrorMsg = dbPool.GetErrMsg();
return outParam;
}
outParam.Db2Conn = db2Conn;
command.Connection = db2Conn.GetRawConn();
command.CommandType = inParam.CommandType;
command.CommandText = inParam.CommandText;
int nLen = inParam.Params.Count;
for (int i = 0; i < nLen; i++)
{
DB2Parameter item = new DB2Parameter(inParam.Params[i].ParamName, inParam.Params[i].ParamType, inParam.Params[i].ParamSzie);
item.Value = inParam.Params[i].ParamValue;
command.Parameters.Add(item);
}
int nRes = 0;
try
{
nRes = command.ExecuteNonQuery();
}
catch(Exception ex)
{
m_errMsg = ex.Message;
m_errMsg += "\n";
m_errMsg += ex.StackTrace;
outParam.ErrorCode = -1;
outParam.ErrorMsg = m_errMsg;
}
outParam.ChangeRows = nRes;
return outParam;
}
//业务层操作
}
public class Db2Manager
{
public string ExecuteQuery()
{
Db2ConnPool dbPool = Db2ConnPool.GetInstance();
dbPool.SetDbConnStr("Database=calldb;User ID=calldev;Server=99.13.44.70:50020;Password=Cmb@2015;persist security info=true");
Db2Connection db2Conn = dbPool.GetConn();
DB2Command command = new DB2Command();
command.Connection = db2Conn.GetRawConn();
command.CommandType = CommandType.Text;
command.CommandText = "select * from msg3.tmpl_struct where ID = @TmplID";
DB2Parameter[] paras = new DB2Parameter[]
{
new DB2Parameter("@TmplID",DB2Type.Char,32)
};
//paras[0] = new DB2Parameter("@TmplID", DB2Type.Char, 32);
paras[0].Value = "APPZH001";
command.Parameters.Add(paras[0]);
DB2DataReader reader = null;
try
{
reader = command.ExecuteReader();
while (reader.Read())
{
string ID = reader["ID"].ToString();
Console.WriteLine("ID:" + ID);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return "";
}
}
#region 注释掉代码2
//public class DbConnManager : IDisposable
//{
// private static DbConnManager instance;
// private static object m_mutex = new object();
// private static object m_iniMutex = new object();
// //private List<DB2Connection> m_lstConn;
// private Stack<DB2Connection> m_lstConn;
// private string m_dbConneStr;
// private Semaphore m_sem;
// private int m_keepAliveNum;
// private int m_maxConnNum;
// private bool m_bInit;
// private string m_errMsg;
// public string GetErrMsg()
// {
// return m_errMsg;
// }
// private DbConnManager()
// {
// m_lstConn = new Stack<DB2Connection>();
// m_keepAliveNum = 1;
// m_maxConnNum = 10;
// m_bInit = false;
// //m_sem = new Semaphore(m_minConnNum, m_MaxConnNum);
// }
// public static DbConnManager GetInstance()
// {
// if(instance == null)
// {
// lock(m_mutex)
// {
// if(instance == null)
// {
// instance = new DbConnManager();
// }
// }
// }
// return instance;
// }
// public DB2Connection GetConn()
// {
// try
// {
// if (!Init())
// {
// return null;
// }
// }
// catch
// {
// return null;
// }
// m_sem.WaitOne();
// if(m_lstConn.Count > 0)
// {
// return m_lstConn.Pop();
// }
// return CreateOpenConn();
// }
// private DB2Connection CreateOpenConn()
// {
// DB2Connection dbConn;
// try
// {
// dbConn = new DB2Connection(m_dbConneStr);
// //Console.WriteLine("生成一个新链接了。。。");
// dbConn.Open();
// //Console.WriteLine("链接打开了");
// }
// catch(Exception ex)
// {
// m_errMsg = ex.Message;
// m_errMsg += "\n";
// m_errMsg += ex.StackTrace;
// return null;
// }
// return dbConn;
// }
// public void PutConn(DB2Connection dbConn)
// {
// if (m_lstConn.Count > m_keepAliveNum)
// {
// dbConn.Close();
// }
// else
// {
// m_lstConn.Push(dbConn);
// }
// m_sem.Release();
// }
// private bool Init()
// {
// if(!m_bInit)
// {
// lock (m_iniMutex)
// {
// if(!m_bInit)
// {
// for (int i = 0; i < m_keepAliveNum; i++)
// {
// DB2Connection dbConn = CreateOpenConn();
// if(null == dbConn)
// {
// m_errMsg = "初始化生成数据库链接失败";
// return false;
// }
// m_lstConn.Push(dbConn);
// }
// m_bInit = true;
// m_sem = new Semaphore(m_maxConnNum, m_maxConnNum);
// if(null == m_sem)
// {
// m_errMsg = "初始化生成数据库链接信号量失败";
// }
// }
// }
// }
// return true;
// }
// public void SetDbConnStr(string connStr)
// {
// this.m_dbConneStr = connStr;
// }
// public void SetMinConnNum(int keepAliveNum)
// {
// this.m_keepAliveNum = keepAliveNum;
// }
// public void SetMaxConnNum(int maxNum)
// {
// this.m_maxConnNum = maxNum;
// }
// public void Dispose()
// {
// while (true)
// {
// DB2Connection dbConn = m_lstConn.Pop();
// if (dbConn != null)
// {
// //Console.WriteLine("关闭释放链接...");
// dbConn.Close();
// }
// else
// {
// break;
// }
// }
// }
//}
#endregion
class Program
{
//Semaphore与AutoResetEvent
static void Main(string[] args)
{
//*********************查询测试*********************
//string connStr = "Database=calldb;User ID=calldev;Server=99.13.44.70:50020;Password=Cmb@2015;persist security info=true";
//Db2Excutor db2Excuter = Db2Excutor.GetInstance();
//db2Excuter.SetConnStr(connStr);
//CDB2ExecutorInParam inParam = new CDB2ExecutorInParam();
//inParam.CommandText = "select * from msg3.tmpl_struct where ID = @TmplID";
//inParam.CommandType = CommandType.Text;
//inParam.AddParameter("@TmplID", DB2Type.Char, 32, "APPZH001");
//CDB2ExecutorOutParam db2OutParam = db2Excuter.ExecuteQuery(inParam);
//if(db2OutParam.ErrorCode < 0)
//{
// Console.WriteLine(db2OutParam.ErrorMsg);
// return;
//}
//try
//{
// DB2DataReader reader = db2OutParam.Reader;
// while (reader.Read())
// {
// string ID = reader["ID"].ToString();
// Console.WriteLine("ID:" + ID);
// }
//}catch(Exception ex)
//{
// Console.WriteLine(ex.Message);
// Console.WriteLine("\n");
// Console.WriteLine(ex.StackTrace);
//}
//db2Excuter.ReleaseDB2Executor(db2OutParam);
//Console.ReadKey();
//*************************************************************
//*********************************更新测试*********************************
string connStr = "Database=calldb;User ID=calldev;Server=99.13.44.70:50020;Password=Cmb@2015;persist security info=true";
Db2Excutor db2Excuter = Db2Excutor.GetInstance();
db2Excuter.SetConnStr(connStr);
CDB2ExecutorInParam inParam = new CDB2ExecutorInParam();
inParam.CommandText = "update msg3.tmpl_struct set state=1 where ID = @TmplID";
inParam.CommandType = CommandType.Text;
inParam.AddParameter("@TmplID", DB2Type.Char, 32, "APPZH001");
CDB2ExecutorOutParam db2OutParam = db2Excuter.ExecuteNonQuery(inParam);
if (db2OutParam.ErrorCode < 0)
{
Console.WriteLine(db2OutParam.ErrorMsg);
return;
}
//try
//{
// DB2DataReader reader = db2OutParam.Reader;
// while (reader.Read())
// {
// string ID = reader["ID"].ToString();
// Console.WriteLine("ID:" + ID);
// }
//}
//catch (Exception ex)
//{
// Console.WriteLine(ex.Message);
// Console.WriteLine("\n");
// Console.WriteLine(ex.StackTrace);
//}
db2Excuter.ReleaseDB2Executor(db2OutParam);
Console.ReadKey();
//*************************************************************************
//Db2ConnPool dbManager = Db2ConnPool.GetInstance();
//dbManager.SetDbConnStr("Database=calldb;User ID=calldev;Server=99.13.44.70:50020;Password=Cmb@2015;persist security info=true");
//for(int i= 0 ; i < 11 ;i++)
//{
// Console.WriteLine(i.ToString());
// DB2Connection db2Conn = dbManager.GetConn();
// if (i == 9)
// {
// dbManager.PutConn(db2Conn);
// }
// Console.WriteLine(i.ToString()+"end...");
//}
//Console.ReadKey();
//Db2Manager dbManager = new Db2Manager();
//string ID = dbManager.ExecuteQuery();
//Console.Write("ID:"+ID);
Console.ReadKey();
//try
//{
// DB2Connection conn = new DB2Connection("Database=calldb;User ID=calldev;Server=99.13.44.70:50020;Password=Cmb@2015;persist security info=true");
// conn.Open();
// Console.WriteLine("连接已经打开...");
// conn.Close();
// Console.WriteLine("连接已关闭");
//}
//catch(Exception ex)
//{
// Console.WriteLine(ex.Message);
// Console.WriteLine(ex.StackTrace);
//}
//Console.WriteLine("连接上了。。。");
//Console.ReadLine();
}
}
}