【问题标题】:Data not saving in local database on re run c#重新运行c#时数据未保存在本地数据库中
【发布时间】:2019-08-01 11:47:14
【问题描述】:

我已经使用 基于服务的数据库 选项创建了一个基本的 Windows 窗体应用程序,因此当我将它部署到另一台电脑上时,它不需要在那里安装 sql server。

我在项目中添加了一个 LINQ-to-SQL 类,here 是我的完整代码

这里是 app.config 文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
  <connectionStrings>
    <add name="_16Sep18_databaseAppWithSetup_.Properties.Settings.WrestlersConnectionString"
      connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Wrestlers.mdf;Integrated Security=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

问题是当我每次运行我的程序时,以前存储的数据不再在数据库中,但是当我输入数据并执行插入、删除、更新等操作时,它可以工作并且数据也显示在 datagridview 中,但是一旦我关闭应用程序,所有这些数据都消失了。 为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 您如何确定没有上传数据库?我怀疑您正在使用 SQL Server Management Studio 来检查数据是否未更改。问题在于您的连接字符串。您的程序正在修改不同的数据库。切勿在连接字符串中使用 mdf 文件名。它不是必需的。数据库附加了文件并且是文件的所有者。然后在连接字符串中使用 Database=myDataBase 来指定您正在使用的服务器上的哪个数据库。您可以通过右键单击数据库并检查属性来检查服务器正在使用的 mdf 文件。
  • @jdweng 你能在 cmets 或答案中写下整个连接字符串吗...我不明白你想说什么 在连接字符串中使用 Database=myDataBase?
  • connectionString="Data Source=(LocalDB)\MSSQLLocalDB;Database=myDataBase;Integrated Security=True" providerName="System.Data.SqlClient" /> 使用实际数据库名称。
  • @jdweng 我的数据库名称是 Wrestlers.mdf 所以我尝试了 connectionString="Data Source=(LocalDB)\MSSQLLocalDB;Database=Wrestlers.mdf;Integrated Security=True" providerName="System.Data. SqlClient" />
  • 但我收到错误 System.Data.dll 中发生“System.Data.SqlClient.SqlException”类型的未处理异常其他信息:无法打开登录请求的数据库“Wrestlers.mdf”。登录失败

标签: c# linq-to-sql localdb


【解决方案1】:

出现此问题的原因是,当您尝试运行程序时,mdf 文件也保存在 DEBUG 文件夹中... 只需转到 app.config 文件,, 好像你已经添加了类似的目录

Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Data\Database1.mdf;Integrated Security=True;User Instance=True

更改 |DataDirectory|到完整的数据目录地址,如

"AttachDbFileName=c:\Project\Data\Database1.mdf"

会有用的

【讨论】:

    【解决方案2】:

    MDF 文件在每次运行时都会复制到调试文件夹,这是您的代码操作的文件,而不是源文件夹中的文件。

    【讨论】:

    • 那么我该如何解决我遇到的问题?
    • 您可以在开发过程中使用文件的完整路径
    • 部署期间呢?
    【解决方案3】:

    我通过更改“始终复制”=>“如果更新则复制”解决了这个问题:

    它对我有用。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-11-06
      • 2017-10-18
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 2020-01-08
      • 2023-04-06
      相关资源
      最近更新 更多