数据库连接字符串的处理方法!加密解密连接字符串。
数据库连接字符串的处理应该是一个项目里最基础的东东了。(除非你的项目不涉及到数据库。) 千万不要小看他,处理不好也时会给你带来不少的麻烦的。 连接字符串的内容在这里就不讨论了,这里主要说一下他的存放位置和读取方法。
我们要达到的目的:无论连接字符串如何变化,都不需要修改项目! 1.把连接字符串写在程序里面。 一般的初级教程里会告诉你这么写
VB.net
Dim cn As New SqlClient.SqlConnection("user id=sa;password=sa;server=.;initial catalog=数据库名称")
C#
SqlClient.SqlConnection cn = new SqlClient.SqlConnection("user id=sa;password=sa;server=.;initial catalog=数据库名称")
这么写当然是没有错误,但是当你写了n个页面后,有一半的页面有这样的代码,这时候如果需要改变连接字符串(比如换用户名和密码)的话,那可就有得你改的了。想当初我就犯过这样的错误,555555
2.放在web.config里面
这是比较流行的方法了。修改web.config文件,加入以下代码
<APPSETTINGS>
<ADD value="user id=sa;password=sa;server=.;initial catalog=数据库名称" key="connString" />
</APPSETTINGS>
然后在需要的地方调用就可以了。
VB.net
Dim cnString As String = System.Configuration.ConfigurationSettings.AppSettings.Item("connString")
C#
string cnString = System.Configuration.ConfigurationSettings.AppSettings["connString"]
这样呢就不怕连接字符串再发生变化了。如果有变化的话,修改web.config就行了。
缺点就是web.congfig 是文本形式的,虽然不能下载,但还是缺乏安全感。
3.放在注册表里面
事先把连接字符串放在注册表里面,用的时候到注册表里面取值。
优点:安全性高。要想看到注册表里的信息不是很容易的事情吧。
缺点:读取注册表需要一定的权限,但是一般的空间是不会开放这个权限的,因为开放了就意味着可以操作注册表,这对服务器就太不安全了。
4.放在DLL文件里面
写一个单独的类,再写一个函数,调用这个函数返回连接字符串。然后把它编译成DLL文件备用
using System;
namespace JYK
{
/// <summary>
/// 取得连接字符串。
/// </summary>
public class Connection
{
public static string ConnectionString()
{
return "user id=sa;password=sa;server=.;initial catalog=数据库名称";
}
}
}
直接打开 DLL文件 看到的是乱码,要比写在web.config有安全感。当然了通过反编译软件还是可以看到里面的代码。
还有就是修改起来不太方便,需要重新编译一下这个类。
5.综合
以上个四种方法各有优越缺点,用哪一个都不是最好的,另外还有一个问题没有提及 —— 加密连接字符串。
那么在一个项目里,怎么做才是最好的方法呢? —— 分层。
项目 <——类(DLL文件) <——存放连接字符串的位置
A.对于项目来说呢只需要知道:当我要用连接字符串的时候我到DLL里面(调用函数)读取就行了,至于连接字符串具体的存放位置、是否加密等都不必关心。
B.类(DLL文件),这个就很重要和灵活了。对于一般的项目可以这么写
using System;
namespace JYK
{
/// <summary>
/// 取得连接字符串。
/// </summary>
public class Connection
{
public static string ConnectionString()
{
return System.Configuration.ConfigurationSettings.AppSettings["ConnString"];
}
}
}
注意:上一个DLL是把连接字符串直接写在了类里面,而这回是到web.config里面读取。
也许你会问:既然是到web.config里面读取连接字符串,那为什么还要加上一个DLL呢,是不是多此一举呀?
这么做是为了达到这个目的:无论连接字符串如何变化,都不需要修改项目!
如果是直接读取web.config,那么如果web.config里面放的是加密的连接字符串,那怎么处理?是不是要修改项目,或者是数据层。不要认为修改数据层就不是修改项目了。
如果加上了一个DLL的话,那么只需要重新编译一下这个DLL就行了。项目可以保持不变。
C.连接字符串的存放位置
这个可以根据项目的要求来做,放在哪里都可以,只需要修改一下DLL文件就行了。
- 云计算技术原理
- WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
- 进入AI时代,你准备好了吗?
- TiDB 在 G7 的实践和未来
- 投资钛值的你,知道钛链是什么吗?
- Is this a MS EnterLib DAAB BUG or not?
- Silverlight 2 has a Timer (DispatcherTimer)
- 难道调用ThreadPool.QueueUserWorkItem()的时候,真是必须调用Thread.Sleep(N)吗?
- silverlight 《Hands-On-Labs》教程系列
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(67)-MVC与ECharts
- 2018年机器学习和数据科学重要会议概览
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(60)-系统总结
- WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构
- 使用动态语言来制作silverlight
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【赵渝强老师】使用Docker Compose进行服务编排
- Kubernetes Pod入门指南
- Java线程池深度揭秘
- 蒙特卡洛法求积分
- 【赵渝强老师】Weblogic域和域的组成
- 前端生僻字显示
- redis密码操作
- SpringBoot 整合 gradle 集成ActiveMQ
- 利用python自动写docx报告
- Maven构建项目速度太慢的解决办法
- 基于kubernetes Api完成更新镜像版本
- 代码覆盖率是什么?如何查看?
- 3分钟短文 | Laravel 注册全局助手函数的2种方式
- 通过案例学Python之定义函数类
- 3分钟短文 | Laravel blade模板里优雅地定义PHP变量