最近做了一个数据库的项目,遇到挺多问题,总结一下。
SQL Server2008介绍:
数据库:32767个数据库,最小为1MB,最大为1TB。
表:每个数据库最多有20亿个表。
列:每个表最多有1024个列,每列的最大字节数为8060(文本和图像列除外)。
索引:每个表有一个聚集索引、249个非聚集索引,一个复合索引最多有16个索引关键字。
触发器:每个表最多有3个触发器,分别用于插入(insert)、修改(update)和删除(delete)等操作。
存储过程:一个存储过程可以有1024个参数和最多32级嵌套。
用户连接:32767个。
锁定及打开的对象:20亿个。
程序和数据库的连接:
两种方式:
方式一:程序与本机数据库连接
连接字符串格式:"DataSource = .\SQLEXPRESS; InitialCatalog=Northwind; IntegratedSecurity=True;"
(1)第一个是数据库的实例名,如我用的是免费版默认的实例,则可以写成".\SQLEXPRESS"。(2)"InitialCatalog"指定了要访问的是哪个数据库,将数据库名赋给它即可。
(3)身份验证方式"IntegratedSecurity",身份验证有两种方式,即Windows身份验证和SQL身份验证,Windows身份验证以Windows登陆的身份连接数据库,SQL身份验证需要显示的给出SQLServer的用户ID和密码。也就是说,没有"IntegratedSecurity"这一属性或设置其为False的话,就要加上"UserId=……;Password=……;"。另外,"Integrated Security"这一属性还会识别SSPI(SecuritySupport ProviderInteface,安全性支持提供都接口),初学者暂时不用理会,只要知道它和True有相同作用就可以了。
方式二:基于内嵌mdf文件的方式与数据库连接
通过查看数据库的属性可以得到连接字符串:
DataSource=(LocalDB)\v11.0;AttachDbFilename="F:\c#\Visual Studio2013\Projects\MDF1\登录测试\MyDB.mdf";Integrated Security=True
或者:
"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;integrated Security=True;User Instance=True"
可以看到”AttachDBFilename=|DataDirectory|\Database1.mdf”,这里指定了附加数据库文件的绝对路径。
注意采用这种方式,要在main函数里添加下面代码:
string dataDir =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);
}
解释如下:
/*该段代码是获取数据库文件路径:
AppDomain.CurrentDomain.BaseDirectory属性为程序所在目录。
If语句判断目录末尾是否为debug或release目录,即程序生成目录。
此处EndsWith方法判断字符串末尾是否包含指定的字符串值。
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
这句获取程序所在目录的上两级目录,即由vs生成的数据库文件路径。
最后设置数据库文件路径。
*/