WCF动态修改数据库句柄

现在在做一个wcf服务端可以由客户自己改数据库句柄连接的功能。
因为我们是用用过数据库句柄连接数据库,然后调用SQLServer存储过程实现数据交互。
通过句柄连接数据的代码如下
SqlConnection conn = new SqlConnection(strConnect);
//参数是数据库连接句柄;例如:
string strConnect = @“Data Source=120.79.247.88,85;Initial Catalog=FAIS;User ID=sa;Password=sa”;
由于是由客户自行修改数据库连接句柄,所以思路是把数据库连接句柄放到一个文件中,项目启动时获取文件内容的句柄,然后通过句柄连接数据库。把句柄放到文件中客户也容易修改。
本打算直接把句柄放进文件中,然后在直接获取句柄作为参数去连接数据库,但是@是指字符串强制不转义,当我们从文件获取@"Data Source=120.79.247.88,85;Initial Catalog=FAIS;User ID=sa;Password=sa"的时候,系统自动又把上述字符串当成字符串,结果如下:
“@“Data Source=120.79.247.88,85;Initial Catalog=FAIS;User ID=sa;Password=sa””
所以不能直接把句柄存储到文件;
然后思路如下:把可以修改的句柄内容放到文件,然后用特定的字符分割,在获取的时候用字符串分割,然后自行拼接成完整的数据句柄。
代码如下:
首先:获取文件中的数据库句柄必须是静态的,因为如果类每实例化一次就获取一次数据库句柄的话效率就会慢,还有就是多用户同时访问一个文件也是不好的。
下面就是把获取文件内容的代码写在静态代码块中
C#的静态代码块的格式为:strict 类名(){}

static    string strConnect = "";
        static DALMethod()
        {
//由于是不是web后台,所以用System.AppDomain.CurrentDomain.BaseDirectory,该属性可以获取本项目的根路径
// System.IO.Path.Combine,是吧两个参数拼接起来,组合成一条路径
             string Path = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, @"ServiesConfig.txt");
//将路径的文件转为流。
StreamReader sr
try{
             sr = new StreamReader(Path, Encoding.Default);
             //获取流的内容
             string  strConnect1 = sr.ReadLine();

        
            //根据规定的格式,将字符串分割成数组
string[] strs = Convert.ToString(strConnect1.Trim()).Split('|');
            string i1 = strs[0];
            string i2 = strs[1];
            string i3 = strs[2];
            string i4 = strs[3];
            //将字符串组合成完整的数据库句柄
            strConnect = @"Data Source=" + i1 + "; Initial Catalog=" + i2 + ";User ID=" + i3 + ";Password=" + i4 + ""; 
}catch (Exception)
            {}finally {
                //关闭流
            sr.Close();
}

}

文件中的内容如下:
在这里插入图片描述
上述方法中要去数据库句柄必须严格要求格式
而且一旦改了数据库句柄就必须把把发布的服务关闭重新启动,不然项目中会一直使用以前的数据库句柄。

代码其实可以更严谨,在这里就不多描述,希望这篇文章可以对大家有所帮助和大家可以参考以便写出更优的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值