3

我有一个页面,我正在尝试识别当前用户的 id 键,以便我可以为新表插入其他信息。我已经包含了在 SQL Server Express 中工作的页面的代码,但我认为在绑定上存在一个参考问题来识别@UserID.

有什么想法吗?

<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" Title="Untitled Page" %>

<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Collections" %>
<%@ Import Namespace="System.Configuration" %>

<%@ Import Namespace="System.Data.SqlServerCe" %>

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Linq" %>
<%@ Import Namespace="System.Web" %>
<%@ Import Namespace="System.Web.Security" %>
<%@ Import Namespace="System.Web.UI" %>
<%@ Import Namespace="System.Web.UI.HtmlControls" %>
<%@ Import Namespace="System.Web.UI.WebControls" %>
<%@ Import Namespace="System.Web.UI.WebControls.WebParts" %>
<%@ Import Namespace="System.Xml.Linq" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Security.Permissions" %>

<script language="c#" runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {


    }

    protected void UserProfileDataSource_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {

        //MembershipUser user = Membership.GetUser();
        //string UserID = user.ProviderUserKey.ToString();
        //e.Command.Parameters["@UserId"].Value = UserID;

        // Get a reference to the currently logged on user
        MembershipUser currentUser = Membership.GetUser();

        // Determine the currently logged on user's UserId value
        Guid currentUserId = (Guid)currentUser.ProviderUserKey;

        // Assign the currently logged on user's UserId to the @UserId parameter
        e.Command.Parameters["@UserId"].Value = currentUserId;
    }

    protected void UserProfile_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
    {
        SettingsUpdatedMessage.Visible = true;
    }
</script>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server">
    <h2>Update Your Settings</h2>
    <p>
        <asp:Label ID="SettingsUpdatedMessage" runat="server" Text="Your settings have been updated." EnableViewState="false" Visible="false"></asp:Label>
    </p>

    <!-- 
             ProviderName="System.Data.SqlServerCe.4.0" -->
    <asp:DetailsView ID="UserProfile" runat="server" 
        AutoGenerateRows="False" DataKeyNames="UserId" 
        DataSourceID="UserProfileDataSource" DefaultMode="Edit" 
        onitemupdated="UserProfile_ItemUpdated">
        <Fields>
            <asp:BoundField DataField="HomeTown" HeaderText="HomeTown" 
                SortExpression="HomeTown" />
            <asp:BoundField DataField="HomepageUrl" HeaderText="HomepageUrl" 
                SortExpression="HomepageUrl" />
            <asp:BoundField DataField="Signature" HeaderText="Signature" 
                SortExpression="Signature" />
            <asp:CommandField ShowEditButton="True" />
        </Fields>
    </asp:DetailsView>

    <asp:SqlDataSource ID="UserProfileDataSource" runat="server" 
        ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" 
             ProviderName="<%$ ConnectionStrings:DefaultConnection.ProviderName %>"
        SelectCommand="SELECT [UserId], [HomeTown], [HomepageUrl], [Signature] FROM [UserProfiles] WHERE ([UserId] = @UserId)" 
        onselecting="UserProfileDataSource_Selecting" UpdateCommand="UPDATE UserProfiles SET
    HomeTown = @HomeTown,
    HomepageUrl = @HomepageUrl,
    Signature = @Signature
WHERE UserId = @UserId
">
        <SelectParameters>
            <asp:Parameter Name="UserId" Type="Object" />
        </SelectParameters>
        <UpdateParameters>
            <asp:Parameter Name="HomeTown" />
            <asp:Parameter Name="HomepageUrl" />
            <asp:Parameter Name="Signature" />
            <asp:Parameter Name="UserId" />
        </UpdateParameters>
    </asp:SqlDataSource>
</asp:Content>

我不断收到错误:

System.ArgumentException:不存在从 DbType 对象到已知 SqlDbType 的映射。

我认为它与 相关UserProfileDataSource_Selecting,但我不确定。我找不到要使用的等效 SQL Server CE 参考。

4

1 回答 1

1

基于托管数据类型映射(SQL Server Compact),与SQL Server 数据类型映射相比,它似乎Object不是有效的DbType,不能SqlDbTypeSQL Server Compact中映射(但在SqlServer中有效)。

由于Userid是 a Guid,请尝试替换:

<SelectParameters>
   <asp:Parameter Name="UserId" Type="Object" />
</SelectParameters>
<UpdateParameters>
   <asp:Parameter Name="HomeTown" />
   <asp:Parameter Name="HomepageUrl" />
   <asp:Parameter Name="Signature" />
   <asp:Parameter Name="UserId" />
</UpdateParameters>

和 :

<SelectParameters>
   <asp:Parameter Name="UserId" DbType="Guid" />
</SelectParameters>
<UpdateParameters>
   <asp:Parameter Name="HomeTown" />
   <asp:Parameter Name="HomepageUrl" />
   <asp:Parameter Name="Signature" />
   <asp:Parameter Name="UserId" DbType="Guid" />
</UpdateParameters>
于 2013-06-23T16:57:27.707 回答