无法保存到数据库或从中检索(正确的信息)

时间:2013-06-19 19:19:05

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

我使用以下方法“成功”将数据保存到数据库:

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时,这是它返回给我的:

enter image description here

1 个答案:

答案 0 :(得分: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
    

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