C#连接数据库的一些鲜为人知的方法
用过VS2008和VS2010的开发人员肯定知道在安装这个IDE的时候会自动安装了一个精简版的SQL数据库服务SqlExpress,这个数据库系统少了最重要的企业管理器,也就是说不能用它来建数据表和一些可视化操作。如果碰到项目中要用到SQL数据库的时候也不能附加到数据库服务里面去,导致项目在连接数据库的时候会提示找不到数据库文件而读取失败。那么,这个精简版的SQL数据库服务是不是意味着一无是处呢?
其实未必,只要我们在连接数据库的时候利用好它就可以了~~
在这里我介绍两种C#中连接数据库的方法。一种需要附加数据库,一种则不要,只需要安装这个精简版的SQL就可以了…
方法一:
连接代码:
string strconn;
strconn = "Data Source=(local);";
strconn += "Initial Catalog=student;";
strconn += "User ID=sa;";
strconn += "Password=;";
SqlConnection con = new SqlConnection(strconn); //通过用户名和密码连接数据库
//SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=library;Integrated Security=True"); //通过系统用户验证连接数据库
con.Open();
SqlDataAdapter thisadapter = new SqlDataAdapter("select * from reader where 条形码='" + txm + "'", con);
SqlCommandBuilder thisbuilder = new SqlCommandBuilder(thisadapter);
DataSet thisdataset = new DataSet();
thisadapter.Fill(thisdataset, "reader");
…… //接下去就是对数据的操作了
这种方法必须要附加数据库文件才可以访问…
优点是可以通过企业管理器直接对数据库进行可视化操作,比如对记录进行全权修改…万一碰到数据有错误,在系统里面不好修改的时候可以进行强制维护。同时,如果后期更新系统,增加新的数据库需求,比如增加字段就可以在里面操作。
当然这也算是缺点,乱改数据可能导致破坏数据库的一些规则和数据一致性,严重的话会导致灾难性的数据崩溃。
方法二:
连接代码:
SqlConnectionStringBuilder connectstringbuilder = new SqlConnectionStringBuilder();
connectstringbuilder.DataSource = @"(local)/sqlexpress"; //指定数据库服务
connectstringbuilder.AttachDBFilename = @"|DataDirectory|/data/library.mdf"; //数据库文件,采用相对地址的方式来指定。注意格式
connectstringbuilder.IntegratedSecurity = true;
connectstringbuilder.UserInstance = true;
SqlConnection thisconnection = new SqlConnection(connectstringbuilder.ConnectionString);
SqlDataAdapter thisadapter = new SqlDataAdapter("select * from reader where 条形码='" + txm + "'", thisconnection);
DataSet dt = new DataSet();
thisadapter.Fill(dt, "info");
…… //接下去就是对数据的操作了
这个方法最大的有点就是允许我们不用安装600M(MSSQL2000)或者1G(MSSQL2005)的数据库系统,只需要安装SQL精简版的数据库服务(22M左右)就可以了。而且不用去附加数据库…
但是这种优点也带来致命的缺点,就是第一次连接数据库的时候会有点慢,这不要紧,但它会重新格式数据库文件的一些结构,导致一些数据格式发生变化,因此连接之后这样的数据库文件是不能再次被附加到数据库系统中的(会报错)。也就是说后期如果要修改数据库,比如增加字段和表等是不太可能实现的。
不过这也在一定的程度上带来了安全性。
以上这两种数据库连接方式各有千秋,是否要使用就看你的系统实际应用需求了…
(注:这两种方法在VS2008+MSSQL调试通过…)