【问题标题】:Cannot save to database or retrieve (right info) from it无法保存到数据库或从中检索(正确信息)
【发布时间】:2013-06-19 19:19:05
【问题描述】:

我正在“成功”地将数据保存到数据库中,使用:

try
{
    // Save the new Client now.
    Profile profile = new Profile()
    {
        Salutation = Salutation,
        FirstName = FirstName,
        MiddleName = MiddleName,
        LastName = LastName,
        Gender = Gender,
        DateOfBirth = DateOfBirth,

        CompanyName = ClientCompanyName,
        StreetAddress = StreetAddress,
        Suburb = Suburb,
        PostCode = PostCode,
        State = State,
        Country = Country,

        ABN = ABN.ToString(),
        ACN = ACN.ToString(),

        TelephoneNumber = TelephoneNumber,
        MobileNumber = MobileNumber,
        EmailAddress = EmailAddress
    };
    database.Profiles.Add(profile);
    database.SaveChanges();

    Console.WriteLine("Client saved.");
}
catch (Exception exception)
{
    Console.WriteLine(exception.Message + Environment.NewLine + exception.InnerException);
}

它说它已被保存。但是当我查看数据库时 - 那里什么都没有!

而且,当我尝试获取刚刚添加的人的名字时,它会返回整个 SELECT 语句 - 不是他们的名字:

var hisname = database.Profiles.Where(x => x.FirstName == "Jase");

什么给了?

这是一个 C# Windows 控制台应用程序。

我的网站上也有同样的代码。

更新

这是我尝试执行 SELECT 时返回给我的结果:

【问题讨论】:

  • 你能告诉我们你的连接字符串到数据库吗?
  • 以及上下文是如何产生的?
  • 你使用什么库来连接你的数据库?大多数库在您保存记录后都需要提交。例如在 NHibernate 中,你可以做 record.Save(entity);它会很高兴地告诉您它已被插入,但您还必须调用 session.Commit();之后。
  • 我正在“提交”,查看问题代码,我正在使用:database.Save(entity);
  • 我在 C# 控制台应用程序中使用实体框架。

标签: c# sql entity-framework console sql-server-ce


【解决方案1】:

您还没有向我们展示您的连接字符串,从您的问题来看,不清楚您是否仅在从 Visual Studio 内或在 VS 外运行您的应用程序时才看到此行为。

如果您碰巧使用 SQL Server Express 和 AttachDbFileName=somename.mdf 方法,并且在 Visual Studio 中运行应用时观察到这种行为,请继续阅读。

整个用户实例和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
    

    其他一切都一模一样和以前一样......

【讨论】:

  • 连接字符串?都是本地的。我打开 Visual Studio,打开我的应用程序,在解决方案资源管理器中右键单击项目名称,添加新的 MS SQL 紧凑型数据库,然后为其选择实体模型,然后将表添加到数据库,然后更新实体模型,使其包含所有内容在数据库中。
  • 我的数据源指向我硬盘上的数据库文件(我在 Visual Studio 中创建的)
  • 我的数据库是 *.sdf - 不是 *.mdf。
  • @Jase:感谢您提供的信息 - 在您的下一个问题中,您应该在问题中提及类似的相关信息,以帮助我们诊断您的问题!
  • @Jase:那么当您在 Visual Studio 中运行您的应用程序时,您是否看到了这种行为?或者甚至当您从 Windows 资源管理器中单独运行它时?问题很可能是相同的:VS 将复制您的 .sdf 数据库文件,插入到 .sdf 的副本中,然后最后丢弃该副本 - 所以您正在查看的 .sdf 是根本没有更新...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多