Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#基于服务的数据库未写入数据库_C#_Sql Server_Visual Studio_Insert - Fatal编程技术网

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

C#基于服务的数据库未写入数据库,c#,sql-server,visual-studio,insert,C#,Sql Server,Visual Studio,Insert,我正试图在Visual Studio C中编写一个应用程序,以写入基于服务的数据库。我遇到的问题是,我没有收到任何错误,但是在重新启动应用程序后,没有任何内容保存到数据库中 我知道它正在写,因为它不允许重复的主键。这几乎就像是一个临时数据库。。。如果是这种情况,我如何使它成为一个持久的基于服务的数据库 这是我的密码: private void button1_Click(object sender, EventArgs e) { try { // Connection t

我正试图在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);
    }
}
我真的不知道发生了什么。

整个AttachDbFileName=方法都有缺陷——最多!在Visual Studio中运行应用程序时,它将围绕
.mdf
文件进行复制(从
app\u Data
目录复制到输出目录-通常是
\bin\debug
-应用程序运行的地方)和最有可能是,您的
INSERT
工作正常-但您最后看到的是错误的.mdf文件

如果您想继续使用这种方法,请尝试在
myConnection.Close()
调用上放置一个断点,然后使用SQL Server Mgmt Studio Express检查
.mdf
文件,我几乎可以肯定您的数据在那里

我认为真正的解决办法是

  • 安装SQL Server Express(您已经完成了安装)

  • 安装SQL Server Management Studio Express

  • 在SSMS Express中创建数据库,并为其指定一个逻辑名称(例如,
    MTR\U数据库

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

    Data Source=.\\SQLEXPRESS;Database=MTR_Database;Integrated Security=True
    
    其他一切都和以前一样


  • 更多背景信息,请参阅Aaron Bertrand的优秀博客文章。

    我以前遇到过这个问题,刚刚解决了它


    不要使用
    | DataDirectory | \MTR\u Database.mdf
    ,使用完整路径。

    我想更多的是,我希望它充当SQLite。。。在应用程序中没有活动服务器。在Visual Studio中嵌入SQL Express是否可以实现这一点?请阅读以下内容:关于SQL Server的异常处理。同时使用MDF的直接文件路径,看看会发生什么@marc_感谢您提供的信息。。。我会试试这个。我一直在MySql中工作,但尝试切换到SQL进行工作。。。到目前为止,这是一次可怕的经历。除此之外,我还要继续努力。如果有效,我会投票给你答案:)我可能明天完成,因为快下班了:(你完全正确……我看错了DB文件。所有内容都正确插入。我想我必须学习如何创建一个新服务器并给它一个数据库名称。然后我可以像对待mySQL一样对待它。我可能只是在服务器上而不是在本地运行它。