C#基于服务的数据库不写入DB

时间:2017-01-16 17:28:29

标签: c# sql-server visual-studio insert

我正在尝试在Visual Studio C#中编写一个应用程序来写入基于服务的数据库。我遇到的问题是我没有收到任何错误,但重新启动应用程序后没有任何内容保存到数据库...

我知道它正在写,因为它不允许重复的主键。它几乎就像是一个临时数据库......如果是这种情况,我该如何使它成为一个基于持久服务的数据库呢?

这是我的代码:

private void button1_Click(object sender, EventArgs e)
{
    try {
        // Connection to DB
        SqlConnection con = new SqlConnection();
        con.ConnectionString = (@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\MTR_Database.mdf;Integrated Security=True");

        // Insert Query
        string insertquery = "INSERT INTO dbo.Job01 ([Item #], [Manufacturer], [Mill Location], [Product Description], [Weld Seam Type], [Outer Dimension], [Wall Thickness], [Coating], [Grade], [Heat], [ANSI/ASME], [Purchase Order], [Standard]) VALUES(@ItemNum, @Manufacturer, @MillLocation, @ProductDescription, @WeldSeamType, @OuterDimension, @WallThickness, @Coating, @Grade, @Heat, @ANSIASME, @PurchaseOrder, @Standard)";

        SqlCommand cmd = new SqlCommand(insertquery, con);

        // open connection
        con.Open();

        // Parameters
        cmd.Parameters.AddWithValue("@ItemNum", item__TextBox.Text);
        cmd.Parameters.AddWithValue("@Manufacturer", manufacturerTextBox.Text);
        cmd.Parameters.AddWithValue("@MillLocation", mill_LocationTextBox.Text);
        cmd.Parameters.AddWithValue("@ProductDescription", product_DescriptionTextBox.Text);
        cmd.Parameters.AddWithValue("@WeldSeamType", weld_Seam_TypeTextBox.Text);
        cmd.Parameters.AddWithValue("@OuterDimension", outer_DimensionTextBox.Text);
        cmd.Parameters.AddWithValue("@WallThickness", wall_ThicknessTextBox.Text);
        cmd.Parameters.AddWithValue("@Coating", coatingTextBox.Text);
        cmd.Parameters.AddWithValue("@Grade", gradeTextBox.Text);
        cmd.Parameters.AddWithValue("@Heat", heatTextBox.Text);
        cmd.Parameters.AddWithValue("@ANSIASME", aNSI_ASMETextBox.Text);
        cmd.Parameters.AddWithValue("@PurchaseOrder", purchase_OrderTextBox.Text);
        cmd.Parameters.AddWithValue("@Standard", standardTextBox.Text);

        // Execute
        cmd.ExecuteNonQuery();

        // close connection
        con.Close();
    }
    catch (Exception ex)
    {
        // catch error
        MessageBox.Show(ex.Message);
    }
}

我真的无法理解正在发生的事情。

2 个答案:

答案 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 中创建数据库,为其指定一个逻辑名称(例如MTR_Database

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

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

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

  5. 另请参阅Aaron Bertrand的优秀博客文章Bad habits to kick: using AttachDbFileName以获取更多背景信息。

答案 1 :(得分:0)

我以前遇到过这个问题,只是解决了。

不要使用|DataDirectory|\MTR_Database.mdf,请使用完整路径。