C#两层转三层

     以前开发的.net程序很多采用典型的CS架构,由程序直接连接数据库。现在需要改成在外网可以直接操作软件。先把数据库搬到了阿里云上,测试发现直接连数据库速度很慢,外网由于网络闪断后,还经常掉线。服务器申请大的带宽又太贵。把数据访问和一些业务逻辑改写成服务,由于软件太大,开发和测试需要投入大量工作,也不现实。最后通过使用SATRDA解决了问题。

    SATRDA 服务器和客户端通过HTTP实现通讯,只有需要数据交互的时候才与服务器通讯,解决了连接掉线的问题。通过提供ODBC驱动的方式,使得客户端代码不需要改变,就实现了两层到三层的转换。

    实际测试了10W条数据访问,阿里云单核1M带宽的服务器,转换前外网直连访问需要65秒,转换后访问不到2秒,效果非常明显。

SATRDA使用过程

服务端配置

1.QQ群:345559891 群文件下载最新版本satrda。解压后,运行服务端server/satserver

2.启动satserver.exe后,打开浏览器(支持chrome,IE8以上,360等),输入http://127.0.0.1:5555/admin 显示登录窗口,登录后可以进行相关配置。

3.选择左边连接管理,显示连接管理界面,用于设置服务端和数据库的连接

默认有3条连接配置,点击mycon1的修改操作图标,修改mycon1的配置

点击测试连接,显示连接成功后,点提交,进行保存。

 

C#客户端示例

1. 修改连接串,需要使用OdbcConnection,如果以前不是OdbcConnection,请将连接对象改成OdbcConnection

 OdbcConnection sqlcon;
 
String ls_server = "127.0.0.1:5555";
String ls_db = "mycon1";
String connectstr = "driver=Smart ODBC Driver;server=" + ls_server + ";DB_NAME=" + ls_db +         
    ";Uid=1;Pwd=;HTTPS=0;PB=0;DesParam=1;";
sqlcon = new OdbcConnection(connectstr);
sqlcon.Open();

2. 和以前操作一致,数据库对象使用ODBC对象,如:OdbcDataAdapter,OdbcCommandBuilder。

结果集对象DataSet可以不变,我们以前数据操作是在统一类中,那么修改统一类就行了,其它对结果集等的操作可以不作更改。

调用查询

ds = new DataSet();
da = new OdbcDataAdapter("select id,name,num,dt,price from test1", sqlcon);
da.Fill(ds);
gv.DataSource = ds.Tables[0];

更新

OdbcCommandBuilder cb = new OdbcCommandBuilder((OdbcDataAdapter)da);
DataSet dschanges = ds.GetChanges();
if (dschanges != null)
{
    da.Update(dschanges);
    ds.AcceptChanges();
}

存储过程

DateTime dt = DateTime.Now;

OdbcCommand cmd = new OdbcCommand("{call sp_rda_test6(?,?,?,?,?,?,?,?)}", sqlcon);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add(new OdbcParameter("@in1", SqlDbType.Int));
cmd.Parameters["@in1"].Value = 5;
cmd.Parameters.Add(new OdbcParameter("@in2", OdbcType.VarChar ,30));
cmd.Parameters["@in2"].Value = "字符参数";
cmd.Parameters.Add(new OdbcParameter("@in3", OdbcType.Double));
cmd.Parameters["@in3"].Value = 2.54;
cmd.Parameters.Add(new OdbcParameter("@in4", OdbcType.VarChar));
cmd.Parameters["@in4"].Value = dt.ToString("yyyy-MM-dd HH:mm:ss");

cmd.Parameters.Add(new OdbcParameter("@out1", SqlDbType.Int));
cmd.Parameters["@out1"].Direction = ParameterDirection.Output;
cmd.Parameters.Add(new OdbcParameter("@out2", OdbcType.VarChar, 30));
cmd.Parameters["@out2"].Direction = ParameterDirection.Output;
cmd.Parameters.Add(new OdbcParameter("@out3", OdbcType.Double));
cmd.Parameters["@out3"].Direction = ParameterDirection.Output;
cmd.Parameters.Add(new OdbcParameter("@out4", OdbcType.DateTime));
cmd.Parameters["@out4"].Direction = ParameterDirection.Output;

cmd.ExecuteNonQuery();

 

最新版本下载,交流请到QQ群:345559891 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值