将数据从 C# 写入 MDF 数据库

Posted

技术标签:

【中文标题】将数据从 C# 写入 MDF 数据库【英文标题】:Writing data from C# to a MDF database 【发布时间】:2021-03-02 20:00:51 【问题描述】:

我有一段 C# 代码用于侦听鼠标上移事件,然后将数据写入数据库。我在应用程序的 Visual Studio 中本地创建了一个 .MDF 数据库文件。我正在使用下面的代码。

问题是当我安装应用程序后在 SQL Server Management Studio 中打开 .MDF 数据库文件时,我看不到任何数据行。我可以看到我创建的列,但没有数据。 Visual Studio 中服务器资源管理器中的“服务器”似乎是我的笔记本电脑号码:

private void MouseUpEvent(object sender, KeyEventArgs e)

    MousePressed = e.KeyCode.ToString();
    int Counting = MousePressed.Split('/').Length - 1;
    long TimePressed = _MousePressed_Length;
    String DateToday = SQLDate;
    String TimeToday = SQLTime;
    float TimeNow = SQLTimeExactmilliseconds;
    var guid = Guid.NewGuid().ToString();
    var guid2 = guid + TimeNow;

    string sqlCon = @"Data Source=.\SQLEXPRESS;" +
               @"AttachDbFilename=|DataDirectory|\Database1.mdf;
                Integrated Security=True;
                Connect Timeout=30;
                User Instance=True";

    using (var db = new SqlConnection(sqlCon))
    
        db.Open();

        var command = new SqlCommand("INSERT INTO Database1 (Table) VALUES (@Date);", db);
        command.Parameters.AddWithValue("@Date", DateToday);
        var command2 = new SqlCommand("INSERT INTO Database1 (Table) VALUES (@Time);", db);
        command2.Parameters.AddWithValue("@Time", TimeToday);
        var command3 = new SqlCommand("INSERT INTO Database1 (Table) VALUES (@Mousepress);", db);
        command3.Parameters.AddWithValue("@Mousepress", TimePressed);
        var command5 = new SqlCommand("INSERT INTO Database1 (Table) VALUES (@TimeExact);", db);
        command5.Parameters.AddWithValue("@TimeExact", TimeNow);
        var command6 = new SqlCommand("INSERT INTO Database1 (Table) VALUES (@Id);", db);
        command6.Parameters.AddWithValue("@Id", guid2);

        command.ExecuteNonQuery();
        command2.ExecuteNonQuery();
        command3.ExecuteNonQuery();
        command5.ExecuteNonQuery();
        command6.ExecuteNonQuery();

        db.Close();
    

当我尝试在服务器资源管理器中打开 .MDF 数据库文件时,我从 Visual Studio 收到此消息:

数据库“C:\Program Files (x86)\muhammadADIbrahim@outlook.com\Setup_Attention_Assist\Database1.mdf”已经存在。选择不同的数据库名称。 尝试为文件 C:\Users\muham\OneDrive\Desktop\Attention_Residue\BAAB UL WORK\NIZAM\CURRENT SOFTWARE\NizamSolutionBackup2.6\Nizam.Monitor\Database1.mdf 附加自动命名数据库失败。存在同名数据库,或指定文件无法打开,或位于 UNC 共享上。

代码编译并正常工作,所以我猜这只是与数据库的连接有关。

应该发生的是,当用户在本地安装应用程序并将数据写入数据库时​​,.mdf 数据与 .msi 文件一起安装。对于任何用户,我应该能够获取本地的.mdf 文件并在 SQL Server Management Studio 中打开它并查看结果。

谢谢, 易卜拉欣

【问题讨论】:

您需要修复您的连接字符串。 MDF 文件可以附加到 SQL Server 或直接从 MDF 文件打开。您的连接字符串不应同时具有 AttachFile(未附加)和 Server。我将从连接字符串中删除 AttachFile 子句并仅使用服务器名称。 旁注:AddWithValue is Evil, Can we stop using AddWithValue() already? 永远不要单独使用“mdf 数据库”。 SQL Server 没有基于文件的数据库的概念,您总是处理服务器及其安装的数据库。您似乎更喜欢 SQLite 之类的可移植数据库,而不是 SQL Server。 【参考方案1】:

mdf数据库的问题是需要安装SQLSever。

mysql 的问题也是类似的。 SQLLite 似乎也不适合我。

我最终为此创建了一个 .txt 文件,目前看来工作正常。

【讨论】:

以上是关于将数据从 C# 写入 MDF 数据库的主要内容,如果未能解决你的问题,请参考以下文章

c# 将数据从结构体写入文件

如何使用 .mdf 文件公开 C# 项目

将 .sdf 数据库转换为 .mdf 数据库

如何连接到 MDF 数据库文件?

SQL Server:从 .mdf 导入数据库?

c#如何将html标签写入指定的excel中