首先在与数据库(文件)建立连接之前需要执行如下代码,该段代码是获取数据库文件路径:
1 string dataDir = AppDomain.CurrentDomain.BaseDirectory; 2 if (dataDir.EndsWith(@"\bin\Debug\") || dataDir.EndsWith(@"\bin\Release\")) 3 { 4 dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName; 5 AppDomain.CurrentDomain.SetData("DataDirectory", dataDir); 6 }
AppDomain.CurrentDomain.BaseDirectory属性为程序所在目录。
If语句判断目录末尾是否为debug或release目录,即程序生成目录。此处EndsWith方法判断字符串末尾是否包含指定的字符串值。
dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
这句获取程序所在目录的上两级目录,即由vs生成的数据库文件路径。
最后设置数据库文件路径。
数据库连接字符串的不同
接下来就是数据库连接字符串内容有别于连接数据库的字符串内容:
"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;integrated Security=True;User Instance=True"
可以看到”AttachDBFilename=|DataDirectory|\Database1.mdf”,这里指定了附加数据库文件的绝对路径。
全部代码如下(vs2008+sqlserver2005):
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Data.SqlClient; 6 7 namespace ADO_NetTest 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 string dataDir = AppDomain.CurrentDomain.BaseDirectory; 14 if (dataDir.EndsWith(@"\bin\Debug\") || dataDir.EndsWith(@"\bin\Release\")) 15 { 16 dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName; 17 AppDomain.CurrentDomain.SetData("DataDirectory", dataDir); 18 } 19 20 using(SqlConnection sqlcon = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;integrated Security=True;User Instance=True")) 21 { 22 sqlcon.Open(); 23 Console.WriteLine("Open Database Connect Success!"); 24 25 using (SqlCommand cmd = sqlcon.CreateCommand()) 26 { 27 cmd.CommandText = "insert into Table1(Name) values('ccc')"; 28 cmd.ExecuteNonQuery(); 29 Console.WriteLine("Insert Data Success!"); 30 } 31 32 } 33 Console.ReadKey(); 34 } 35 } 36 }