【问题标题】:Getting a database error when trying to view data尝试查看数据时出现数据库错误
【发布时间】:2021-03-29 09:45:13
【问题描述】:

好的,

我有一个与我的 SQL 数据连接交互的页面。它尝试运行存储过程,但每次我运行它时,它都会锁定数据库并显示此错误:

这是连接和存储过程触发的代码` FileUpload1.SaveAs(Server.MapPath("images//" + FileUpload1.FileName)); string Image = MapPath("images//" + FileUpload1.FileName);

        SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\BOOKS.mdf;Integrated Security=True;User Instance=True");

                SqlCommand cmd = new SqlCommand("AddaBook", con);
            cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@Title", SqlDbType.NVarChar).Value = txtTitle.Text;
                cmd.Parameters.AddWithValue("@Image", SqlDbType.NVarChar).Value = Image;
                cmd.Parameters.AddWithValue("@Author", SqlDbType.NVarChar).Value = txtAuthor.Text;
                cmd.Parameters.AddWithValue("@PublishDate", SqlDbType.DateTime).Value = txtPublishDate.Text;
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
                cmd.Connection.Close();

                lblUploadResult.Text = "File uploaded successfully.";
                lblUploadResult.ForeColor = System.Drawing.Color.ForestGreen;

            }` 

感谢您的任何帮助,并永远感谢您!

【问题讨论】:

  • 您应该尝试一下 { } catch { } 或搜索相关的锁定文件以验证它没有被使用。但是 One Drive 和 SQL Server 服务可以非常频繁地锁定这些文件。即使是防病毒软件也可以在扫描时锁定文件。

标签: c# sql asp.net webforms database-connection


【解决方案1】:

尝试将您的 mdf 文件移出 OneDrive。有时,当 OneDrive 正在执行上传或执行的许多其他进程之一时,它会锁定文件 - 尤其是来自系统用户。

【讨论】:

  • 我会把它移到哪里?
  • 我已移动文件,现在我收到此错误“无法打开数据库 'C:\BOOK\APP_DATA\DB.MDF',因为它是版本 904。此服务器支持版本 852和更早版本。不支持降级路径。无法打开新数据库“C:\BOOK\APP_DATA\DB.MDF”。CREATE DATABASE 已中止。尝试为文件 C:\BOOK\App_Data 附加自动命名的数据库\DB.mdf 失败。存在同名数据库,或指定文件无法打开,或位于 UNC 共享上。"
【解决方案2】:

这表示您的数据库正在使用中,因此您无法访问它。

确保数据库without closing the connection中没有其他代码被访问。

您也可以使用以下代码更新代码,因为删除了一些不需要的行。

    SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\BOOKS.mdf;Integrated Security=True;User Instance=True");

    SqlCommand cmd = new SqlCommand("AddaBook", con);
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.AddWithValue("@Title", SqlDbType.NVarChar).Value = txtTitle.Text;
    cmd.Parameters.AddWithValue("@Image", SqlDbType.NVarChar).Value = Image;
    cmd.Parameters.AddWithValue("@Author", SqlDbType.NVarChar).Value = txtAuthor.Text;
    cmd.Parameters.AddWithValue("@PublishDate", SqlDbType.DateTime).Value = txtPublishDate.Text;
    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();

    lblUploadResult.Text = "File uploaded successfully.";
    lblUploadResult.ForeColor = System.Drawing.Color.ForestGreen;

【讨论】:

    【解决方案3】:

    您已经打开了文件,但只是不知道。例如,如果您尝试打开一个名为 Test.txt 的文本文件(或相反的已打开的 .mdf 数据库文件),那么您将收到此错误,这也是您可能会收到其他错误的原因该行但都与第一个错误有关。

    使用数据库,事情可能会变得有点棘手,因为您可以连接到数据库,有时会出现错误并被踢出系统而无需关闭连接或进程...此时当前正在运行但未知进程可能使连接保持活动状态。您可以查看系统上所有打开的进程,或者查看您是否错误地打开了连接,然后在尝试通过应用程序打开它之前将其关闭。

    【讨论】:

    • 如何关闭它?
    • Microsoft 说:“我们强烈建议您在使用完毕后始终关闭连接,以便将连接返回到池中。您可以使用Connection 对象,或通过在 C# 中的 using 语句中打开所有连接”。所以这可以通过调用一个简单的方法来完成,该方法通过几个步骤来确保一切都正确关闭...docs.microsoft.com/en-us/dotnet/framework/data/adonet/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 2021-07-01
    • 2020-07-13
    相关资源
    最近更新 更多