c#分离后的数据库读写分离的好处能直接访问吗?

[原][C#]ADO访问多数据库的C#库 - 推酷
[原][C#]ADO访问多数据库的C#库
[C#]ADO访问多数据库的C#库
本文遵循“
”创作公用协议
一,C# Database 库
整了一个支持通过ADO方式访问多种数据库(OLE,MySQL,SQL Server,Oracle)的 C# 库 Database。实现相当简单,用工厂方法创建各种数据库访问的 wrapper 类即可。
源码下载:
类图如下:
IDatabase 是对外公开的接口类,其中定义了一堆操作数据库的接口方法;
DatabaseFactory 是窗口数据库的工厂类;
DatabaseType 是一个数据库类型的枚举;
DatabaseHelper 封装一些和数据库相关的常用的小工具方法,如便捷地创建 connection string,从 dataset 中读取值等。
二,使用示例
示例代码如下:
internal class Program
private IDatabase _
private const DatabaseType _dbType = DatabaseType.MySQL;
#region Database related
// You need to create a MySQL database named &sample& with columns
// id(int), Name(varchar(45)), Address(varchar(45)), Age(int) for this test.
private void CreateDatabase()
if (_db == null)
// Setup you database information here.
var connStr = DatabaseHelper.CreateConnectionString(_dbType, &localhost&, &sample&, &root&, &123456&);
_db = DatabaseFactory.CreateDatabase(_dbType, connStr);
if (_db == null)
Console.WriteLine(& && Failed to create database with connection string {0}.&, connStr);
Console.WriteLine(& && Created database.&);
private void CloseDatabase()
if (_db != null)
_db.Dispose();
public void TestInsert()
if (_db == null)
const string sqlCmd = &insert into customer (id, Name,Address,Age) values (0,'飘飘白云','上海张江高科',28)&;
_db.Open();
_db.ExcuteSql(sqlCmd);
Console.WriteLine(& && Succeed. {0}&, sqlCmd);
catch (Exception ex)
Console.WriteLine(& && Failed to {0}. {1}&, sqlCmd, ex.Message);
_db.Close();
public void TestFind()
if (_db == null)
const string sqlCmd = &select Name,Address,Age from customer where Name='飘飘白云'&;
_db.Open();
var dataSet = _db.ExcuteSqlForDataSet(sqlCmd);
var recordCount = DatabaseHelper.GetRowCount(dataSet);
Console.WriteLine(& && Excuted {0}&, sqlCmd);
Console.WriteLine(& && Found {0} record.&, recordCount);
for (int i = 0; i & recordC i++)
var name = DatabaseHelper.GetValue(dataSet, i, 0)
var address = DatabaseHelper.GetValue(dataSet, i, 1)
var age = DatabaseHelper.GetIntValue(dataSet, i, 2);
Console.WriteLine(&
&& Record {0}, Name:{1}, Address:{2}, Age:{3}&, i + 1, name, address, age);
catch (Exception ex)
Console.WriteLine(& && Failed to {0}. {1}&, sqlCmd, ex.Message);
_db.Close();
public void TestUpdate()
if (_db == null)
const string sqlCmd = &update customer set Address='张江高科' where Name='飘飘白云'&;
_db.Open();
_db.ExcuteSql(sqlCmd);
Console.WriteLine(& && Succeed. {0}&, sqlCmd);
catch (Exception ex)
Console.WriteLine(& && Failed to {0}. {1}&, sqlCmd, ex.Message);
_db.Close();
public void TestDelete()
if (_db == null)
const string sqlCmd = &delete from customer where Name='飘飘白云'&;
_db.Open();
_db.ExcuteSql(sqlCmd);
Console.WriteLine(& && Succeed. {0}&, sqlCmd);
catch (Exception ex)
Console.WriteLine(& && Failed to {0}. {1}&, sqlCmd, ex.Message);
_db.Close();
#endregion
static void Main(string[] args)
var runner = new Program();
runner.CreateDatabase();
runner.TestInsert();
runner.TestFind();
runner.TestUpdate();
runner.TestFind();
runner.TestDelete();
runner.TestFind();
runner.CloseDatabase();
Console.ReadLine();
运行输出结果:
三,注意事项
如果你对常用的数据库命令语法还不太了解,可以参考如下链接:
// SQL syntax
Truncate :&
由于各个数据库厂商有不同的数据库实现,导致数据库命令语法有一些细微的差别,因此需要特别注意。以下就列出一些常见的不同之处:
1,最大查询记录数
对于 SQL Server 使用 top 关键字。如:
select top 100 * from customer
对于 MySQL 使用 limit 关键字。如:
select * from customer limit 100
对于 Oracle 使用 rownum &=。如:
select * from customer where rownum &= 100
2,命令中出现的替换字符(详见 DatabaseHelper 类的 Validate 方法)
对于 SQL Server,单引号 ' 要用两个单引号 '' 替换;双引号 & 要用两个双引号 && 替换;
对于 MySQL,单引号 ' 要用 \'&替换;反斜杠 \ 用于 \\ 替换。
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见所谓Windows后台服务,即后台自动运行的程序,一般随操作系统启动而启动,在我的电脑 服务后应用程序 服务里面能看到当前电脑的服务.一般而言,程序上用VC、C++写Windows服务,但是我对这些语言不是很熟,一般编程用C#较多,所以就用C#语言写了一个Windows服务.
其实需求是这样的,做那个报价系统的时候加入了发短信的功能,订单处理完即将发货的时候要发送短信都客户手机上,公司内部员工处理订单超时要自动发短信,群发产品促销信息到客户手机上等,还有定时发送短信的需求,所以最后面决定把发短信的模块独立出来,以后还有什么功能方便一起调用,而最终选择了采用Windows后台服务.
其实Windows服务并不好做到通用,它并不能在用户的界面显示一些什么信息等,它只是在后台默默的处理一些事情,起着辅助的作用.那如何实现发送段信通用调用的接口呢?它们之间的信息又是如何来交互呢?数据库!对,就是它存储数据信息的.而数据库都能很方便的访问操作.把发送短信的后台服务定时去访问一个数据库,而另外任何要发送短信的地方也访问数据库,并插入一条要发送的短信到表里面,稍后Windows后台服务访问该表将此短信发送出去.这可能是一个比较蠢的方法,但实现起来较简单.
首先,由于它是要安装的,所以它运行的时候就需要一个安装类Installer将服务安装到计算机,新建一个后台服务安装类继承自Installer,安装初始化的时候是以容器进行安装的,所以还要建立ServiceProcessInstaller和ServiceInstaller服务信息组件添加到容器安装,在Installer类增加如下代码:
private ponentModel.IContainer components = null;private System.ServiceProcess.ServiceProcessInstaller spIprivate System.ServiceProcess.ServiceInstaller sIprivate void InitializeComponent(){components = new ponentModel.Container();// 创建ServiceProcessInstaller对象和ServiceInstaller对象this.spInstaller = new System.ServiceProcess.ServiceProcessInstaller();this.sInstaller = new System.ServiceProcess.ServiceInstaller();// 设定ServiceProcessInstaller对象的帐号、用户名和密码等信息this.spInstaller.Account = System.ServiceProcess.ServiceAccount.LocalSthis.spInstaller.Username = null;this.spInstaller.Password = null;// 设定服务名称this.sInstaller.ServiceName = "SendMessage";sInstaller.DisplayName = "发送短信服务";sInstaller.Description = "一个定时发送短信的服务";// 设定服务的启动方式this.sInstaller.StartType = System.ServiceProcess.ServiceStartMode.Athis.Installers.AddRange(new System.Configuration.Install.Installer[] { this.spInstaller, this.sInstaller });}
再添加一个服务类继承自ServiceBase,我们可以重写基类的OnStart、OnPause、OnStop、OnContinue等方法来实现我们需要的功能并设置指定一些属性.由于是定事发送短信的服务,自然少不了Windows记时器,在OnStart事件里我们写入服务日志,并初始化记时器.
private System.Timers.Tprivate static readonly string CurrentPath = Application.StartupPath + "\\";protected override void OnStart(string[] args){string path = CurrentPath + "Log\\start-stop.log";FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write);StreamWriter sw = new StreamWriter(fs);sw.WriteLine("The Service is Starting On " + DateTime.Now.ToString());sw.Flush();sw.Close();fs.Close();time = new System.Timers.Timer(<span style="color: #00 * Convert.ToInt32(GetSettings("TimeSpan")));time.Enabled = true;time.Elapsed += this.TimeOtime.Start();}
实例化记时器类启动后,将在指定时间间隔触发Elapsed指定事件,如上GetSettings为读取我App.config文件里一个配置节点(值为30)的方法,所以上面将会每隔30秒调用TimeOut方法.而改方法就是我们发短信的具体操作.代码如下:
private void TimeOut(object sender, EventArgs e){try{if (GetSettings("Enabled").ToLower() == "true"){SqlConnection con = new SqlConnection(GetSettings("ConnString"));SqlCommand cmd = new SqlCommand("select [sysid],[admin_inner_code],[user_inner_code],[phone],[message],[sendtime] from [tbl_note_outbox]", con);con.Open();SqlDataReader rdr = cmd.ExecuteReader();while (rdr.Read()){string phone = rdr["phone"].ToString();string message = rdr["message"].ToString();string sendtime = rdr["sendtime"].ToString();System.Text.Encoding encoder = System.Text.Encoding.GetEncoding("GB2312");string url = string.Format("http://211.155.23.205/isapi.dll?SendSms&AgentID={0}&PassWord={1}&phone={2}&msg={3}&sendtime={4}", GetSettings("AgentID"), GetSettings("PassWord"), phone,System.Web.HttpUtility.UrlEncode( message,encoder), sendtime);System.Net.WebClient wClient = new System.Net.WebClient();string msg = System.Text.Encoding.Default.GetString(wClient.DownloadData(url));wClient.Dispose();//删除已经发送成功的,并保存发送记录if (msg == "发送成功"){DateTime dtsend = sendtime == "<span style="color: #" ? DateTime.Now : DateTime.ParseExact(sendtime, "yyyyMMddHHmmss", null);string sql = string.Format("delete from [tbl_note_outbox] where [sysid]={0} INSERT INTO [tbl_note_log] ([admin_inner_code],[user_inner_code],[status],[phone],[message],[sendtime]) VALUES('{1}','{2}','{3}','{4}','{5}','{6}')", rdr["sysid"], rdr["admin_inner_code"], rdr["user_inner_code"], msg, phone, message, dtsend);SqlConnection conn = new SqlConnection(GetSettings("ConnString"));SqlCommand delete = new SqlCommand(sql, conn);conn.Open();delete.ExecuteNonQuery();conn.Close();delete.Dispose();}}rdr.Close();con.Close();cmd.Dispose();}}catch (Exception ex){string errorPath = CurrentPath + "Log\\error.log";if (!File.Exists(errorPath)){FileStream create = File.Create(errorPath);create.Close();}FileStream fs = new FileStream(errorPath, FileMode.Append, FileAccess.Write);StreamWriter sw = new StreamWriter(fs);sw.WriteLine("Exception: " +ex.Message+" --"+ DateTime.Now.ToString());sw.Flush();sw.Close();fs.Close();}}
上面我们使用try、catch访问数据库,并记录错误异常信息. 发送短信是使用发送一个Web请求发送出去的,要注意请求url字符串的编码类型,要与请求页面编码一致,不然会出现乱码.上面我们请求的是智网通集团短信(网址:)的Web接口,通过访问他的网站来实现发短信,当然还要传递一些用户名、密码、手机号码和要发送的短信息等参数.他的收费平均大概为7分/条的样子,其实我原本不想用发送Web请求的这样方式来发送短信的,它本身提供了调用它发送短信的DLL,而且还有vc、delphi调用的Demo,但是没有用C#调用的例子,我刚开始试着用非托管动态链接库他提供的DLL,不知方法调用那里出错了一直都没能成功发送出短信,所以后来就用了他的Web方式接口了.他页面直接返回发送短信的状态信息.返回发送成功则短信发送成功,成功后我再将此条信息从要发送短信表里删除并保存在发送记录表里面,以备日后方便查询.其实登陆他的官网进入后台也能方便的查询,如下图.
发送短信服务的代码基本上搞定了,就看怎么在服务器上安装部署了.C#写的Windows后台服务不能直接安装,需要借助.NET Framework里面的InstallUtil.exe安装工具安装,我们可以做成一个执行CMD命令的文件BAT文件来安装启动它,命令如下:
%windir%\Microsoft.NET\Framework\v2.0.50727\InstallUtil.exe %CD%\SendMessage.exenet start SendMessage
安装完成以后,我们可以在我的电脑管理服务里面看到才安装上的后台服务.
经测试,采用定时访问数据库发送短信的服务并不是很耗资源,刚启动的时候只占用内存为7、8M左右,经过在服务器上连续运行几天不关闭占用的内存也只升到15M左右,运行比较稳定,这里提供一个短信二次开发接口说明,有兴趣的朋友可以去下载看下
阅读(...) 评论()
QQ:817647 MSN: EMail:这里介绍下比较简单的方式,引用MySql.Data.dll然后添加一个MySqlHelper类来对MySql数据库进行访问和操作。
1.将MySql.Data.dll引用到你的项目中
下载地址:
添加引用后在你的数据库操作类(如MySqlHelper.cs)中添加引用声明
using&MySql.Dusing&MySql.Data.MySqlC
2.添加一个MySqlHelper类来对MySql数据库进行操作。&MySqlHelper.CS网上有很多列子,把代码拷下来就可以直接使用。如果里面的ExcecuteNonquery、GetDataSet等基本访问数据库方法还是无法满足你开发需求的话,你还可以自己重新改写代码来扩充其功能。
MySqlHelper:
using&Susing&System.Cusing&System.Cusing&MySql.Dusing&MySql.Data.MySqlCusing&System.D///&&summary&///MYSQLHelper&的摘要说明///&&/summary&public&abstract&class&MySqlHelper{&&&&//数据库连接字符串&&&&public&static&string&Conn&=&"Database='wp';Data&Source='localhost';User&Id='root';Password='root';charset='utf8';pooling=true";&&&&//&用于缓存参数的HASH表&&&&private&static&Hashtable&parmCache&=&Hashtable.Synchronized(new&Hashtable());&&&&///&&summary&&&&&///&&给定连接的数据库用假设参数执行一个sql命令(不返回数据集)&&&&///&&/summary&&&&&///&&param&name="connectionString"&一个有效的连接字符串&/param&&&&&///&&param&name="cmdType"&命令类型(存储过程,&文本,&等等)&/param&&&&&///&&param&name="cmdText"&存储过程名称或者sql命令语句&/param&&&&&///&&param&name="commandParameters"&执行命令所用参数的集合&/param&&&&&///&&returns&执行命令所影响的行数&/returns&&&&&public&static&int&ExecuteNonQuery(string&connectionString,&CommandType&cmdType,&string&cmdText,&params&MySqlParameter[]&commandParameters)&&&&{&&&&&&&&MySqlCommand&cmd&=&new&MySqlCommand();&&&&&&&&using&(MySqlConnection&conn&=&new&MySqlConnection(connectionString))&&&&&&&&{&&&&&&&&&&&&PrepareCommand(cmd,&conn,&null,&cmdType,&cmdText,&commandParameters);&&&&&&&&&&&&int&val&=&cmd.ExecuteNonQuery();&&&&&&&&&&&&cmd.Parameters.Clear();&&&&&&&&&&&&return&&&&&&&&&}&&&&}&&&&///&&summary&&&&&///&用现有的数据库连接执行一个sql命令(不返回数据集)&&&&///&&/summary&&&&&///&&param&name="connection"&一个现有的数据库连接&/param&&&&&///&&param&name="cmdType"&命令类型(存储过程,&文本,&等等)&/param&&&&&///&&param&name="cmdText"&存储过程名称或者sql命令语句&/param&&&&&///&&param&name="commandParameters"&执行命令所用参数的集合&/param&&&&&///&&returns&执行命令所影响的行数&/returns&&&&&public&static&int&ExecuteNonQuery(MySqlConnection&connection,&CommandType&cmdType,&string&cmdText,&params&MySqlParameter[]&commandParameters)&&&&{&&&&&&&&MySqlCommand&cmd&=&new&MySqlCommand();&&&&&&&&PrepareCommand(cmd,&connection,&null,&cmdType,&cmdText,&commandParameters);&&&&&&&&int&val&=&cmd.ExecuteNonQuery();&&&&&&&&cmd.Parameters.Clear();&&&&&&&&return&&&&&}&&&&///&&summary&&&&&///使用现有的SQL事务执行一个sql命令(不返回数据集)&&&&///&&/summary&&&&&///&&remarks&&&&&///举例:&&&&///&&int&result&=&ExecuteNonQuery(connString,&CommandType.StoredProcedure,&"PublishOrders",&new&MySqlParameter("@prodid",&24));&&&&///&&/remarks&&&&&///&&param&name="trans"&一个现有的事务&/param&&&&&///&&param&name="cmdType"&命令类型(存储过程,&文本,&等等)&/param&&&&&///&&param&name="cmdText"&存储过程名称或者sql命令语句&/param&&&&&///&&param&name="commandParameters"&执行命令所用参数的集合&/param&&&&&///&&returns&执行命令所影响的行数&/returns&&&&&public&static&int&ExecuteNonQuery(MySqlTransaction&trans,&CommandType&cmdType,&string&cmdText,&params&MySqlParameter[]&commandParameters)&&&&{&&&&&&&&MySqlCommand&cmd&=&new&MySqlCommand();&&&&&&&&PrepareCommand(cmd,&trans.Connection,&trans,&cmdType,&cmdText,&commandParameters);&&&&&&&&int&val&=&cmd.ExecuteNonQuery();&&&&&&&&cmd.Parameters.Clear();&&&&&&&&return&&&&&}&&&&///&&summary&&&&&///&用执行的数据库连接执行一个返回数据集的sql命令&&&&///&&/summary&&&&&///&&remarks&&&&&///&举例:&&&&///&&MySqlDataReader&r&=&ExecuteReader(connString,&CommandType.StoredProcedure,&"PublishOrders",&new&MySqlParameter("@prodid",&24));&&&&///&&/remarks&&&&&///&&param&name="connectionString"&一个有效的连接字符串&/param&&&&&///&&param&name="cmdType"&命令类型(存储过程,&文本,&等等)&/param&&&&&///&&param&name="cmdText"&存储过程名称或者sql命令语句&/param&&&&&///&&param&name="commandParameters"&执行命令所用参数的集合&/param&&&&&///&&returns&包含结果的读取器&/returns&&&&&public&static&MySqlDataReader&ExecuteReader(string&connectionString,&CommandType&cmdType,&string&cmdText,&params&MySqlParameter[]&commandParameters)&&&&{&&&&&&&&//创建一个MySqlCommand对象&&&&&&&&MySqlCommand&cmd&=&new&MySqlCommand();&&&&&&&&//创建一个MySqlConnection对象&&&&&&&&MySqlConnection&conn&=&new&MySqlConnection(connectionString);&&&&&&&&//在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,&&&&&&&&//因此commandBehaviour.CloseConnection&就不会执行&&&&&&&&try&&&&&&&&{&&&&&&&&&&&&//调用&PrepareCommand&方法,对&MySqlCommand&对象设置参数&&&&&&&&&&&&PrepareCommand(cmd,&conn,&null,&cmdType,&cmdText,&commandParameters);&&&&&&&&&&&&//调用&MySqlCommand&&的&ExecuteReader&方法&&&&&&&&&&&&MySqlDataReader&reader&=&cmd.ExecuteReader(CommandBehavior.CloseConnection);&&&&&&&&&&&&//清除参数&&&&&&&&&&&&cmd.Parameters.Clear();&&&&&&&&&&&&return&&&&&&&&&}&&&&&&&&catch&&&&&&&&{&&&&&&&&&&&&//关闭连接,抛出异常&&&&&&&&&&&&conn.Close();&&&&&&&&&&&&throw;&&&&&&&&}&&&&}&&&&///&&summary&&&&&///&返回DataSet&&&&///&&/summary&&&&&///&&param&name="connectionString"&一个有效的连接字符串&/param&&&&&///&&param&name="cmdType"&命令类型(存储过程,&文本,&等等)&/param&&&&&///&&param&name="cmdText"&存储过程名称或者sql命令语句&/param&&&&&///&&param&name="commandParameters"&执行命令所用参数的集合&/param&&&&&///&&returns&&/returns&&&&&public&static&DataSet&GetDataSet(string&connectionString,&CommandType&cmdType,&string&cmdText,&params&MySqlParameter[]&commandParameters)&&&&{&&&&&&&&//创建一个MySqlCommand对象&&&&&&&&MySqlCommand&cmd&=&new&MySqlCommand();&&&&&&&&//创建一个MySqlConnection对象&&&&&&&&MySqlConnection&conn&=&new&MySqlConnection(connectionString);&&&&&&&&//在这里我们用一个try/catch结构执行sql文本命令/存储过程,因为如果这个方法产生一个异常我们要关闭连接,因为没有读取器存在,&&&&&&&&try&&&&&&&&{&&&&&&&&&&&&//调用&PrepareCommand&方法,对&MySqlCommand&对象设置参数&&&&&&&&&&&&PrepareCommand(cmd,&conn,&null,&cmdType,&cmdText,&commandParameters);&&&&&&&&&&&&//调用&MySqlCommand&&的&ExecuteReader&方法&&&&&&&&&&&&MySqlDataAdapter&adapter&=&new&MySqlDataAdapter();&&&&&&&&&&&&adapter.SelectCommand&=&&&&&&&&&&&&&DataSet&ds&=&new&DataSet();&&&&&&&&&&&&adapter.Fill(ds);&&&&&&&&&&&&//清除参数&&&&&&&&&&&&cmd.Parameters.Clear();&&&&&&&&&&&&conn.Close();&&&&&&&&&&&&return&&&&&&&&&}&&&&&&&&catch&(Exception&e)&&&&&&&&{&&&&&&&&&&&&throw&e;&&&&&&&&}&&&&}&&&&///&&summary&&&&&///&用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列&&&&///&&/summary&&&&&///&&remarks&&&&&///例如:&&&&///&&Object&obj&=&ExecuteScalar(connString,&CommandType.StoredProcedure,&"PublishOrders",&new&MySqlParameter("@prodid",&24));&&&&///&&/remarks&&&&&///&param&name="connectionString"&一个有效的连接字符串&/param&&&&&///&&param&name="cmdType"&命令类型(存储过程,&文本,&等等)&/param&&&&&///&&param&name="cmdText"&存储过程名称或者sql命令语句&/param&&&&&///&&param&name="commandParameters"&执行命令所用参数的集合&/param&&&&&///&&returns&用&Convert.To{Type}把类型转换为想要的&&/returns&&&&&public&static&object&ExecuteScalar(string&connectionString,&CommandType&cmdType,&string&cmdText,&params&MySqlParameter[]&commandParameters)&&&&{&&&&&&&&MySqlCommand&cmd&=&new&MySqlCommand();&&&&&&&&using&(MySqlConnection&connection&=&new&MySqlConnection(connectionString))&&&&&&&&{&&&&&&&&&&&&PrepareCommand(cmd,&connection,&null,&cmdType,&cmdText,&commandParameters);&&&&&&&&&&&&object&val&=&cmd.ExecuteScalar();&&&&&&&&&&&&cmd.Parameters.Clear();&&&&&&&&&&&&return&&&&&&&&&}&&&&}&&&&///&&summary&&&&&///&用指定的数据库连接执行一个命令并返回一个数据集的第一列&&&&///&&/summary&&&&&///&&remarks&&&&&///&例如:&&&&///&&Object&obj&=&ExecuteScalar(connString,&CommandType.StoredProcedure,&"PublishOrders",&new&MySqlParameter("@prodid",&24));&&&&///&&/remarks&&&&&///&&param&name="connection"&一个存在的数据库连接&/param&&&&&///&&param&name="cmdType"&命令类型(存储过程,&文本,&等等)&/param&&&&&///&&param&name="cmdText"&存储过程名称或者sql命令语句&/param&&&&&///&&param&name="commandParameters"&执行命令所用参数的集合&/param&&&&&///&&returns&用&Convert.To{Type}把类型转换为想要的&&/returns&&&&&public&static&object&ExecuteScalar(MySqlConnection&connection,&CommandType&cmdType,&string&cmdText,&params&MySqlParameter[]&commandParameters)&&&&{&&&&&&&&MySqlCommand&cmd&=&new&MySqlCommand();&&&&&&&&PrepareCommand(cmd,&connection,&null,&cmdType,&cmdText,&commandParameters);&&&&&&&&object&val&=&cmd.ExecuteScalar();&&&&&&&&cmd.Parameters.Clear();&&&&&&&&return&&&&&}&&&&///&&summary&&&&&///&将参数集合添加到缓存&&&&///&&/summary&&&&&///&&param&name="cacheKey"&添加到缓存的变量&/param&&&&&///&&param&name="commandParameters"&一个将要添加到缓存的sql参数集合&/param&&&&&public&static&void&CacheParameters(string&cacheKey,&params&MySqlParameter[]&commandParameters)&&&&{&&&&&&&&parmCache[cacheKey]&=&commandP&&&&}&&&&///&&summary&&&&&///&找回缓存参数集合&&&&///&&/summary&&&&&///&&param&name="cacheKey"&用于找回参数的关键字&/param&&&&&///&&returns&缓存的参数集合&/returns&&&&&public&static&MySqlParameter[]&GetCachedParameters(string&cacheKey)&&&&{&&&&&&&&MySqlParameter[]&cachedParms&=&(MySqlParameter[])parmCache[cacheKey];&&&&&&&&if&(cachedParms&==&null)&&&&&&&&&&&&return&null;&&&&&&&&MySqlParameter[]&clonedParms&=&new&MySqlParameter[cachedParms.Length];&&&&&&&&for&(int&i&=&<span style="color: #,&j&=&cachedParms.L&i&&&j;&i++)&&&&&&&&&&&&clonedParms[i]&=&(MySqlParameter)((ICloneable)cachedParms[i]).Clone();&&&&&&&&return&clonedP&&&&}&&&&///&&summary&&&&&///&准备执行一个命令&&&&///&&/summary&&&&&///&&param&name="cmd"&sql命令&/param&&&&&///&&param&name="conn"&OleDb连接&/param&&&&&///&&param&name="trans"&OleDb事务&/param&&&&&///&&param&name="cmdType"&命令类型例如&存储过程或者文本&/param&&&&&///&&param&name="cmdText"&命令文本,例如:Select&*&from&Products&/param&&&&&///&&param&name="cmdParms"&执行命令的参数&/param&&&&&private&static&void&PrepareCommand(MySqlCommand&cmd,&MySqlConnection&conn,&MySqlTransaction&trans,&CommandType&cmdType,&string&cmdText,&MySqlParameter[]&cmdParms)&&&&{&&&&&&&&if&(conn.State&!=&ConnectionState.Open)&&&&&&&&&&&&conn.Open();&&&&&&&&cmd.Connection&=&&&&&&&&&mandText&=&cmdT&&&&&&&&if&(trans&!=&null)&&&&&&&&&&&&cmd.Transaction&=&&&&&&&&&mandType&=&cmdT&&&&&&&&if&(cmdParms&!=&null)&&&&&&&&{&&&&&&&&&&&&foreach&(MySqlParameter&parm&in&cmdParms)&&&&&&&&&&&&&&&&cmd.Parameters.Add(parm);&&&&&&&&}&&&&}}
MySqlHelper里面的方法和SqlHelper差不多,就不一一说明了。
除此之外引用DBUTILITY类库也是一个很好的选择,DBUTILITY.DLL是一个集成SQLHELPER、MYSQLHELPER以及ORACLEHELPER等众多数据库操作类的类库,添加引用后就可以直接调用其中方法对数据库进行查询、编辑等操作,十分的方便。
3.配置你的MYSQL数据库链接字符串如下:
//数据库连接字符串public&static&string&Conn&=&"Database='数据库名';Data&Source='数据库服务器地址';User&Id='数据库用户名';Password='密码';charset='utf8';pooling=true";
由于PHPMYADMIN相当于一个小型网站,因此在你的数据库连接中还要设置下PHPMYADMIN编码charset='utf8'
4.以上准备工作完成后,就可以通过调用MySQLHelper类里面的方法来对MYSQL数据库进行操作了,这些方法的用法也与SqlHelper类似。
dgv.DataSource=MySqlHelper.GetDataSet(MySqlHelper.Conn,&CommandType.Text,&"select&*&from&wp_posts",&null).Tables[<span style="color: #].DefaultV
执行MySql查询后得到结果:
对应的MySql数据库中的数据:
阅读(...) 评论()

我要回帖

更多关于 数据库分离是什么意思 的文章

 

随机推荐