c#本地数据库插入不工作

本文关键字:工作 插入 数据库 | 更新日期: 2023-09-27 18:10:38

我试了很多次,但插入不工作!请帮帮我……

代码:

SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)'v11.0;AttachDbFilename=|DataDirectory|'Database1.mdf;Integrated Security=True");
conn.Open();
SqlCommand cmd = new SqlCommand("INSERT INTO mytbl(Id, Nav) VALUES('yek','du')", conn); //yek and du are examples
//Following command doesn't work, too
//"INSERT INTO mytbl(Id, Nav) VALUES('"+tb.Text+"','"+tb2.Text+"')"
cmd.ExecuteNonQuery();
conn.Close();

c#本地数据库插入不工作

整个User Instance和AttachDbFileName=方法是有缺陷的-充其量!当你在Visual Studio中运行你的应用程序时,它会复制周围的.mdf文件(从你的App_Data目录到输出目录-通常是.'bin'debug -你的应用程序运行的地方)和最有可能,你的INSERT工作得很好-但你只是在看错误的。mdf文件在结束!

如果你想坚持这种方法,然后尝试在myConnection.Close()调用上设置一个断点-然后用SQL Server Mgmt Studio Express检查.mdf文件-我几乎可以肯定你的数据在那里。

在我看来,真正的解决方案
  1. 安装SQL Server Express(你已经这样做了)

  2. install SQL Server Management Studio Express

  3. SSMS Express中创建数据库,给它一个逻辑名称(例如VictoryDatabase)

  4. 使用它的逻辑数据库名(在服务器上创建时给出)连接到它,不要乱搞物理数据库文件和用户实例。在这种情况下,您的连接字符串类似于:

    Data Source=.''SQLEXPRESS;Database=VictoryDatabase;Integrated Security=True
    

    和其他的都是和以前完全一样的

也可参阅Aaron Bertrand的优秀博客文章《坏习惯:使用AttachDbFileName获取更多背景信息》

您的代码正在工作,但db(.mdf)首先被复制到'bin'debug目录,应用程序正在使用该目录('bin'debug'Database1.mdf)。使用以下代码获取应用程序根目录下的db (.mdf)路径。

string path = AppDomain.CurrentDomain.BaseDirectory.ToLower().Replace("''bin", "").Replace("''debug", "").Replace("''release", "").TrimEnd('''');
string conStr =  "Data Source=(LocalDB)''v11.0;AttachDbFilename=" + path + "''Database1.mdf;Integrated Security=True";