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

时间:2015-02-12 02:15:38

标签: c# asp.net sql-server visual-studio-2013

我正在使用Visual Studio 2013中的C#和ASP.net编写数据库的数据输入表单。我正在尝试构建的表单允许我输入Nintendo Power Magazine的前30名结果轮询到数据库中的表。

有问题的页面的计划是有一个GridView,以便我可以看到我已输入的结果,以及将用于实际数据输入的FormView。为了简化这个过程我通过一个下拉菜单来解决问题和游戏,为了避免混淆NES的“Duck Tales”和Game Boy的“Duck Tales”,我设置了一个额外的下拉菜单菜单选择游戏发布的系统。反过来,该菜单的结果将决定哪些游戏将出现在“游戏”下拉列表中。

所以,我几乎把这个表单放在一起了 - 但是,我在测试表单时遇到了问题。当我从下拉菜单中选择系统时,我收到以下错误消息:

  

无法将文件'C:\ Users \ TEST \ Documents \ Visual Studio 2013 \ WebSites \ NPPollDataEntry \ App_Data \ aspnet-NPPollDataEntry-14ef47ad-43d0-4a7d-b1c9-de351dbca3d5.mdf'作为数据库'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();
            }
        }
    }
}

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我认为问题可能与此问题相同:

Connect local database mdf Visual Studio

需要将MDF文件附加到sql server实例。

答案 1 :(得分:0)

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

来自here