ASP.net 无法将文件附加为数据库

ASP.net unable to attach file as database

我正在 Visual Studio 2013 年使用 C# 和 ASP.net 为数据库编写数据输入表单。我正在尝试构建的是一个允许我输入的表单Nintendo Power Magazine 的前 30 名民意调查结果进入数据库中的 table。

相关页面的计划是拥有一个 GridView,以便我可以查看我已经输入的结果,以及一个将用于实际数据输入的 FormView。为了使过程更简单,我通过下拉菜单进行问题和游戏,并避免混淆 NES 的 "Duck Tales" 和 Game Boy 的 "Duck Tales",我设置了一个额外的下拉菜单-向下菜单 select 游戏发布的系统。该菜单的结果将决定 "Games" 下拉列表中的游戏。

所以,我几乎完成了将此表单放在一起的工作 - 但是,我 运行 在测试表单时遇到了问题。当我从下拉菜单转到 select 系统时,我收到此错误消息:

Cannot attach the file 'C:\Users\TEST\Documents\Visual Studio 2013\WebSites\NPPollDataEntry\App_Data\aspnet-NPPollDataEntry-14ef47ad-43d0-4a7d-b1c9-de351dbca3d5.mdf' as database 'aspnet-NPPollDataEntry-14ef47ad-43d0-4a7d-b1c9-de351dbca3d5'.

我做错了什么?

表单页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ResultsEntryForm.aspx.cs" Inherits="ResultsEntryForm" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="ResultsDataEntryForm" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
            AutoGenerateColumns="False" DataSourceID="PollResultsDataSource" 
            AllowSorting="True">
            <Columns>
                <asp:BoundField DataField="Issue_Date" HeaderText="Issue_Date" 
                    SortExpression="Issue_Date" />
                <asp:BoundField DataField="Platform_Type" HeaderText="Platform_Type" 
                    SortExpression="Platform_Type" />
                <asp:BoundField DataField="Element_Title" HeaderText="Element_Title" 
                    SortExpression="Element_Title" />
                <asp:BoundField DataField="Poll_Score" HeaderText="Poll_Score" 
                    SortExpression="Poll_Score" />
            </Columns>
        </asp:GridView>
        <asp:FormView ID="ResultsFormView" runat="server" AllowPaging="True" 
            DataSourceID="PollResultsDataSource">
            <InsertItemTemplate>
                Issue_Date:
                <asp:DropDownList ID="IssueDateDropDownList" runat="server" AutoPostBack="True" 
                    DataSourceID="IssueDateDropDownDataSource" DataTextField="Issue_Date" 
                    DataValueField="Issue_ID">
                </asp:DropDownList>
                <br />
                Platform_Type:
                <asp:DropDownList ID="PlatformDropDownList" runat="server" 
                    DataSourceID="PlatformDropDownDataSource" DataTextField="Platform_Type" 
                    DataValueField="Platform_ID" AutoPostBack="True" 
                    OnSelectedIndexChanged="PlatformDropDownList_SelectedIndexChanged">
                </asp:DropDownList>
                <br />
                Element_Title:
                <asp:DropDownList ID="TitleDropDownList" runat="server" AutoPostBack="True">
                </asp:DropDownList>
                <br />
                Poll_Score:
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                <br />
                <asp:LinkButton ID="InsertButton" runat="server" CausesValidation="True" 
                    CommandName="Insert" Text="Insert" ValidationGroup="Insert" />
                &nbsp;<asp:LinkButton ID="InsertCancelButton" runat="server" 
                    CausesValidation="False" CommandName="Cancel" Text="Cancel" />
            </InsertItemTemplate>
            <ItemTemplate>
                Issue_Date:
                <asp:Label ID="Issue_DateLabel" runat="server" 
                    Text='<%# Bind("Issue_Date") %>' />
                <br />
                Platform_Type:
                <asp:Label ID="Platform_TypeLabel" runat="server" 
                    Text='<%# Bind("Platform_Type") %>' />
                <br />
                Element_Title:
                <asp:Label ID="Element_TitleLabel" runat="server" 
                    Text='<%# Bind("Element_Title") %>' />
                <br />
                Poll_Score:
                <asp:Label ID="Poll_ScoreLabel" runat="server" 
                    Text='<%# Bind("Poll_Score") %>' />
                <br />
                <asp:LinkButton ID="EditButton" runat="server" CausesValidation="False" 
                    CommandName="Edit" Text="Edit" />
                &nbsp;<asp:LinkButton ID="NewButton" runat="server" CausesValidation="False" 
                    CommandName="New" Text="New" />
            </ItemTemplate>
        </asp:FormView>
    </div>
    <asp:SqlDataSource ID="PollResultsDataSource" runat="server" 
        ConnectionString="<%$ ConnectionStrings:NintendoPowerPollConnectionString %>" 
        InsertCommand="INSERT INTO Poll_Results(Issue_ID, Element_Group_ID, Poll_Score) VALUES (@Issue_ID, @Element_Group_ID, @Poll_Score)" 
        SelectCommand="SELECT NintendoPowerIssue.Issue_Date, na_lkpPlatformTypes.Platform_Type, na_Games.Element_Title, Poll_Results.Poll_Score 
            FROM Poll_Results INNER JOIN NintendoPowerIssue ON Poll_Results.Issue_ID = NintendoPowerIssue.Issue_ID 
            INNER JOIN na_Games ON Poll_Results.Element_Group_ID = na_Games.Element_Group_ID 
            INNER JOIN na_lkpPlatformTypes ON na_Games.Platform_ID = na_lkpPlatformTypes.Platform_ID" 
        UpdateCommand="UPDATE Poll_Results SET Poll_Score = @Poll_Score 
            FROM Poll_Results 
            INNER JOIN na_Games ON Poll_Results.Element_Group_ID = na_Games.Element_Group_ID 
            INNER JOIN NintendoPowerIssue ON Poll_Results.Issue_ID = NintendoPowerIssue.Issue_ID 
            WHERE (Poll_Results.Issue_ID = @Issue_ID) AND (Poll_Results.Element_Group_ID = @Element_Group_ID)">
        <InsertParameters>
            <asp:Parameter Name="Issue_ID" />
            <asp:Parameter Name="Element_Group_ID" />
            <asp:Parameter Name="Poll_Score" />
        </InsertParameters>
        <UpdateParameters>
            <asp:Parameter Name="Poll_Score" />
            <asp:Parameter Name="Issue_ID" />
            <asp:Parameter Name="Element_Group_ID" />
        </UpdateParameters>
    </asp:SqlDataSource>
    <asp:SqlDataSource ID="IssueDateDropDownDataSource" runat="server" 
        ConnectionString="<%$ ConnectionStrings:NintendoPowerPollConnectionString %>" 
        SelectCommand="SELECT [Issue_ID], [Issue_Date] FROM [NintendoPowerIssue]">
    </asp:SqlDataSource>
    <asp:SqlDataSource ID="PlatformDropDownDataSource" runat="server" 
        ConnectionString="<%$ ConnectionStrings:NintendoPowerPollConnectionString %>" 
        SelectCommand="SELECT [Platform_ID], [Platform_Type] FROM [na_lkpPlatformTypes]" />
    </form>
</body>
</html>

返回码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

public partial class ResultsEntryForm : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    private DataTable BindDropDownList(string field)
    {
        DataTable dt = new DataTable();
        SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString());
        try
        {
            connection.Open();
            string sqlStatement = "SELECT [Element_Group_ID], [Element_Title] FROM [na_Games] WHERE ([Platform_ID] = @Platform_ID)";
            SqlCommand sqlCmd = new SqlCommand(sqlStatement, connection);
            SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
            sqlCmd.Parameters.AddWithValue("@Platform_ID", field);
            sqlDa.Fill(dt);
        }
        catch (System.Data.SqlClient.SqlException ex)
        {
            Server.ClearError();
            Response.Write(ex.Message + ("<br />") + ex.Source);
        }
        finally
        {
            connection.Close();
        }

        return dt;
    }
    protected void PlatformDropDownList_SelectedIndexChanged(object sender, EventArgs e)
    {
        DropDownList ddl1 = (DropDownList)sender;
        FormView fv = (FormView)ddl1.NamingContainer;
        if (fv != null)
        {
            DropDownList ddl2 = (DropDownList)fv.FindControl("TitleDropDownList");
            {
                DataTable dt = BindDropDownList(ddl1.SelectedItem.Value);
                ddl2.DataTextField = "Field1";
                ddl2.DataValueField = "Field2";
                ddl2.DataBind();
            }
        }
    }
}

在此先感谢您的帮助。

我认为问题可能与这个问题相同:

Connect local database mdf Visual Studio

MDF 文件需要附加到 sql 服务器实例。

  • 打开Developer Command Propmpt for VisualStudio
  • 运行 命令:
    • sqllocaldb.exe stop v11.0
    • sqllocaldb.exe delete v11.0

来自 here.