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

今天在用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();
                  }
              }
 
 	}


 
 

你可能感兴趣的:(sql,数据库,server,Security,C#,database,WinForm)