无法访问桌面应用程序中的mdf文件

时间:2015-03-16 10:37:31

标签: c# sql-server wpf

我需要你的帮助..也许是我无法解决的小任务,但我不知道如何在任何搜索引擎上搜索

我在我的WPF登录注册桌面应用程序中使用.mdf文件(vs 2103)..一切正常,没有编译错误。我使用Visual Studio中的查询将一些数据插入.mdf文件,然后尝试通过应用程序登录,它运行正常。此外,如果我使用.mdf文件的“绝对路径”,我也可以从应用程序的注册选项中注册即插入.mdf文件。当我尝试使用“相对路径”插入.mdf文件时,问题就开始了...它不会将数据插入.mdf ....我不知道为什么

(这个绝对路径不起作用。我在数据库文件夹中有.mdf个文件)

//connection string 
connetionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Database\Database1.mdf;Integrated Security=True";

//code
SqlCommand sqlCmd;
string sql = null;
SqlConnection sqlCnn = new SqlConnection(connetionString);

try
{
    sqlCnn.Open();
    sql = "insert into [NewTable] ( Name , Password  )  values ('ABC' , '12345')";

    sqlCmd = new SqlCommand(sql, sqlCnn);
    sqlCmd.ExecuteNonQuery();
    sqlCnn.Close();
    MessageBox.Show("You have Been Registered");
}
catch (Exception ex)
{
    MessageBox.Show("" + ex);
}

显示消息“您已注册”

但在.mdf文件中不可见... 我想问..为什么它表现得像这样....我想使用相对路径,因为我们无法判断客户端系统的绝对路径......我在做什么错?如何处理这个(我猜是自制的)问题?

1 个答案:

答案 0 :(得分:1)

整个 AttachDbFileName = 方法存在缺陷 - 充其量!在Visual Studio中运行应用程序时,它将复制.mdf文件(从App_Data目录到输出目录 - 通常是.\bin\debug - 应用程序运行的地方)和最有可能,您的INSERT工作正常 - 但您最后只是查看错误的.mdf文件

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

我认为真正的解决方案将是

  1. 安装SQL Server Express(你已经完成了)

  2. 安装SQL Server Management Studio Express

  3. SSMS Express 中创建数据库,为其指定一个逻辑名称(例如MyDatabase

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

    Data Source=.\\SQLEXPRESS;Database=MyDatabase;Integrated Security=True
    

    其他所有内容都完全与以前相同......

  5. 另请参阅Aaron Bertrand优秀博客文章Bad habits to kick: Using AttachDbFileName以获取更多深入解释和提示