导读:上篇博客中介绍了ADO生成串的前一部分,本篇博客结合报错,接着介绍剩下的部分。
一、代码展示
<span style="font-family:KaiTi_GB2312;font-size:18px;"> <connectionStrings> <add name="TestCrateDatabaseEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=myname;initial catalog=mydatabase;persist security info=True;user id=sa;password=mypassword;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /> </connectionStrings></span>
二、代码分析
2.1,provider=System.Data.SqlClient;
数据库驱动,在这段代码中,使用的是SQL Server的数据库服务器驱动。如果将来换库,比如换成MySQL,那么对应的这一个变量,也应该换成MySQL的驱动。
首先是下载驱动程序集,然后添加引用,最后更改连接字符串。
2.2,provider connection string
数据库连接串,切库的时候,关键替换这一条字符串。
data source:数据源,可以是数据库服务器的IP地址,也可以是名称,如果是本地的话,可以通过local和. 来代替。
initial catalog:将要连接的数据库名称。
persist security info:是否保存安全信息,比如,是否保存数据库密码,true为保存,false为不保存。
Integrated Security:集成安全,为true,也就是说使用Windows验证的方式去连接到数据库服务器。这样方式的好处是不需要在连接字符串中编写用户名和密码,从一定程度上说提高了安全性。当为false时,才使用连接串中的user id 和password连接数据库。当为SSP(SSPI是Security Support Provider Interface:Microsoft安全支持提供器接口)I时,同样表示用window身份验证。注:默认值为false。
MultipleActiveResultSets:指定多活动的结果集是否与指定的链接相互关联;类型是bool类型;true代表与指定的链接关联;false代表与指定的链接不关联;默认值是false。解释一下,比如说有一个程序叫做 测试系统,当我们每打开一次测试系统进行数据操作的时候,都会连接一次对应的数据库。然后我再接着打开,再打开一个,再打开一个,就会连接很多次。如果将这个属性值设为false,那么不管我打开多少个测试系统,始终都只会有一个用户和数据库连接。
App=EntityFramework:使用EntityFramework的方式连接数据库操作。
2.3,providerName="System.Data.EntityClient"
使用的驱动名称(这里我们用的是DBfirst,使用的是EF实体模型,所以驱动是System.Data.EntityClient)。注意:在数据库连接字符串中也有一个provider,provider存在于数据库连接串中,指的是数据库的驱动。而这个providerName是并列于name、connectionString的,它们不在一个层级上。
三、报错分析和注意事项
3.1,Integrated Security的值无效。
但是我是配置的Integrated Security的属性为true,但是我的数据库却又是需要SQL 登录验证的,所以这两个之间相冲突。需要更改Integrated Security属性或者将数据库的验证方式改为window验证。
3.2,不支持关键字MultipleActiveResultSets
这个问题是在拼接的过程中报的错,是由于在紧接前面的数据库名称的时候,没有分号空格,它将数据库名称和这个属性值混合为了一体,所以出现了不支持关键字。
3.3,拼接的时候,注意引号
前面说过,在这一整个拼接串中,有3个并列部分,一个是Entity的name,一个是entity的连接信息connectionString,另外一个是EF的驱动。而在provider connection string中,数据库连接串,以及后面的MultipleActiveResultSets属性和APP属性是一个整体,如果不用引号标记,就会出错。
四、总结
在拼接字符串的过程中,还出了很多错,这段经历真的是让人醉了。我也想不明白当时怎么就接下了切库的活儿,真的是痛并快乐着。切库至今都没有出来,还是比较丢人的。
这条字符串拼接至今都在报错,还有一个错至今未解决。但是,当时我成功过,那么我坚信,未来的我也可以成功。我可以成功一次,我就可以成功无数次。