这一篇开始讲连接数据库。程序要和数据库进行通信,必须放入连接字符串。这时就摄及到一个问题,因为在上一篇中我们说过了在程序中内嵌mdf文件的方式来和数遍库通信,所以,连接字符串针对本机和内嵌的数据库就有两种不同的表示形式。下面我们将一一说明(有的同学容易忽视技术细节,在编程时直接粘贴代码,而不管它到底是什么意思,为什么要这样写,我觉得这种学习方式不可取,虽然节省了时间,但理解它可以帮助你更好的了解.net,了解它内部原理,比无知的粘贴代码要好。)
针对本机上的数据库,连接字符串是这样的:"Data Source = .\SQLEXPRESS; InitialCatalog=Northwind; IntegratedSecurity=True;"这里只是当做一个例子,为了好说明而已。连接字符串包含一个由一些属性名和值组成的集合,这些属性指出了要访问的数据库服务器,访问方式等,每一个属性都由分号隔开。第一个是数据库的实例名,如我用的是免费版默认的实例,则可以写成".\SQLEXPRESS"。"InitialCatalog"指定了要访问的是哪个数据库,将数据库名赋给它即可。然后就是选择身份验证方式"Integrated Security",身份验证有两种方式,即Windows身份验证和SQL身份验证,Windows身份验证以Windows登陆的身份连接数据库,SQL身份验证需要显示的给出SQLServer的用户ID和密码。也就是说,没有"IntegratedSecurity"这一属性或设置其为False的话,就要加上"UserId=……;Password=……;"。另外,"Integrated Security"这一属性还会识别SSPI(SecuritySupport ProviderInteface,安全性支持提供都接口),初学者暂时不用理会,只要知道它和True有相同作用就可以了。
接下来就是针对程序内嵌mdf文件的方式来连接数据库的连接字符串,这个有点麻烦,先看代码:
- stringdataDir = AppDomain.CurrentDomain.BaseDirectory;
- if(dataDir.EndsWith(@"\bin\Debug\") ||dataDir.EndsWith(@"\bin\Release\"))
- {
- dataDir =System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
- AppDomain.CurrentDomain.SetData("DataDirectory",dataDir);
- }
- stringdataDir = AppDomain.CurrentDomain.BaseDirectory;
- if(dataDir.EndsWith(@"\bin\Debug\") ||dataDir.EndsWith(@"\bin\Release\"))
- {
- dataDir =System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
- AppDomain.CurrentDomain.SetData("DataDirectory",dataDir);
- }
以上这段代码放在Main函数最开始的部分,然后连接字符串是这样:
DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;IntegratedSecurity=True;User Instance=True
通过应用程序配置文件来处理连接字符串,这样就可以避免重复输入复杂的代码,
保存后就OK了,然后就是在程序中引用这个configuration,在项目下的“引用”上右击—添加引用,在稍后弹出的对话框中选择
System.Configuration,单击确定,完成对该命名空间的引用添加。再在程序usingSystem.Configuration;这样,就可以在程序中确定连接字符串了,代码如下:
string ConStr =ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;这样,一个ConStr就代替了那么一段字符串。
虽然看起来还是有些麻烦,但当你需要打开多个数据库连接的时候,优势就体现出来了,特别是它在项目发布后仍可以继续修改App.Config中的内容,避免以后连接服务器更换了还需要回来源代码中修改后重新发布。