您的位置:首页 > 数据库

C#写winform程序,提示插入数据库成功却没有数据

2012-10-17 16:41 489 查看
今天在用C#写一个winform程序时,要向数据库Sql server2005 中插入数据,

程序提示成功,但打开数据库却没有值,再次执行时,提示主键重复,可是

数据库中并没有数据啊

原来的代码为

string sql = @"Data Source=.;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True";
using (SqlConnection con = new SqlConnection(sql))
{
con.Open();
using(SqlCommand cmd=con.CreateCommand())
{
cmd.CommandText = "insert into tb_test(ID,Name,Age) values('wang1','haha',123)";
cmd.ExecuteNonQuery();
}
}


后来发现除了项目中有个 Database1.mdf 以外,在bin/Debug/下也有一个 Database1.mdf 。

经查阅资料得知,当使用相对路径时,程序把数据库文件复制到了 bin/Debug/ 下面了,也就是说

当插入数据时,实际上是向Debug下面数据库插入文件,而不是在根目录下的数据库,所以无论怎么插入

在根目录下的数据库中根本没有数据,同时,多次插入还会导致主键重复。

所以在调试程序时,应使用绝对路径,等发布程序时再改回。因为程序启动路径是“../bin/Debug”,而我们实际的数据库却在外面。

在这个问题中还可以这样:

private void button1_Click(object sender, EventArgs e)
{
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);
}

string sql = @"Data Source=.;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True";
using (SqlConnection con = new SqlConnection(sql))
{
con.Open();
using(SqlCommand cmd=con.CreateCommand())
{
cmd.CommandText = "insert into tb_test(ID,Name,Age) values('wang1','haha',123)";
cmd.ExecuteNonQuery();
}
}

}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐