GVKun编程网logo

使用SqlDataSource删除空字典错误 – ASP.net ListView

17

在本文中,我们将给您介绍关于使用SqlDataSource删除空字典错误–ASP.netListView的详细内容,此外,我们还将为您提供关于.net–SqlDataSource与ObjectData

在本文中,我们将给您介绍关于使用SqlDataSource删除空字典错误 – ASP.net ListView的详细内容,此外,我们还将为您提供关于.net – SqlDataSource与ObjectDataSource、ASP.NET 2.0:如何将asp:Menu绑定到SqlDataSource?、ASP.NET – DataSourceID和DataSource有什么区别?、asp.net – ObjectDataSource删除问题的知识。

本文目录一览:

使用SqlDataSource删除空字典错误 – ASP.net ListView

使用SqlDataSource删除空字典错误 – ASP.net ListView

我正在尝试使用乐观并发创建一个简单的ListView.它使用VS自动生成的Delete,Insert,Update语句(除了1更改插入:参见代码).
 插入和编辑工作正常并提交到数据库.尝试删除时,我收到此错误:

您已指定delete命令比较sqlDataSource’MySourceHere’上的所有值,但传入值的字典为空.传入有效字典进行删除或将模式更改为OverwriteChanges.

我曾尝试将“CompareAllValues”更改为“OverwriteChanges”以推迟并发工作,但是“中断”更新和删除命令,这似乎是用旧值刷新ListView.我能找到解决此问题的唯一线程涉及更改为“OverwriteChanges”,或者是没有声明“DataKeyNames”的人. Relevent标记低于(我希望).

有什么想法吗?

<asp:sqlDataSource ID="ManageUseRSSource" runat="server" 
    ConflictDetection="CompareAllValues" 
    ConnectionString="<%$ConnectionStrings:ConnectionString %>" 
        DeleteCommand="DELETE FROM [DUSER] WHERE [userid] = ? AND (([username] = ?) OR ([username] IS NULL AND ? IS NULL)) AND (([userpass] = ?) OR ([userpass] IS NULL AND ? IS NULL))" 
    InsertCommand="INSERT INTO [DUSER] ([username],[userpass]) VALUES (?,?)" 
    OldValuesParameterFormatString="original_{0}" 
    ProviderName="<%$ConnectionStrings:ConnectionString.ProviderName %>" 
    SelectCommand="SELECT * FROM [DUSER] ORDER BY [userid] ASC" 
    UpdateCommand="UPDATE [DUSER] SET [username] = ?,[userpass] = ? WHERE [userid] = ? AND (([username] = ?) OR ([username] IS NULL AND ? IS NULL)) AND (([userpass] = ?) OR ([userpass] IS NULL AND ? IS NULL))">
    <DeleteParameters>
        <asp:Parameter Name="original_userid" Type="Int16" />
        <asp:Parameter Name="original_username" Type="String" />
        <asp:Parameter Name="original_username" Type="String" />
        <asp:Parameter Name="original_userpass" Type="String" />
        <asp:Parameter Name="original_userpass" Type="String" />
    </DeleteParameters>
    <InsertParameters>
    <%--This is removed since [userid] is an automatically generated index.--%>
        <%--<asp:Parameter Name="userid" Type="Int16" />--%>
        <asp:Parameter Name="username" Type="String" />
        <asp:Parameter Name="userpass" Type="String" />
    </InsertParameters>
    <UpdateParameters>
        <asp:Parameter Name="username" Type="String" />
        <asp:Parameter Name="userpass" Type="String" />
        <asp:Parameter Name="original_userid" Type="Int16" />
        <asp:Parameter Name="original_username" Type="String" />
        <asp:Parameter Name="original_username" Type="String" />
        <asp:Parameter Name="original_userpass" Type="String" />
        <asp:Parameter Name="original_userpass" Type="String" />
    </UpdateParameters>
</asp:sqlDataSource>
<asp:ListView ID="ListView1" runat="server" DataKeyNames="userid" 
    DataSourceID="ManageUseRSSource" InsertItemPosition="LastItem">
    <AlternatingItemTemplate>
        <tr>
            <td>
                <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" 
                    Text="Delete" />
                <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="Edit" />
            </td>
            <td>
                <asp:Label ID="useridLabel" runat="server" Text='<%# Eval("userid") %>' />
            </td>
            <td>
                <asp:Label ID="usernameLabel" runat="server" Text='<%# Eval("username") %>' />
            </td>
            <td>
                <asp:Label ID="userpassLabel" runat="server" Text='<%# Eval("userpass") %>' />
            </td>
        </tr>
    </AlternatingItemTemplate>
    <EditItemTemplate>
        <tr>
            <td>
                <asp:Button ID="UpdateButton" runat="server" CommandName="Update" 
                    Text="Update" />
                <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" 
                    Text="Cancel" />
            </td>
            <td>
                <asp:Label ID="useridLabel1" runat="server" Text='<%# Eval("userid") %>' />
            </td>
            <td>
                <asp:TextBox ID="usernameTextBox" runat="server" 
                    Text='<%# Bind("username") %>' />
            </td>
            <td>
                <asp:TextBox ID="userpasstextBox" runat="server" 
                    Text='<%# Bind("userpass") %>' />
            </td>
        </tr>
    </EditItemTemplate>
    <EmptyDataTemplate>
        <table runat="server">
            <tr>
                <td>
                    No data was returned.</td>
            </tr>
        </table>
    </EmptyDataTemplate>
    <InsertItemTemplate>
        <tr>
            <td>
                <asp:Button ID="InsertButton" runat="server" CommandName="Insert" 
                    Text="Insert" />
                <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" 
                    Text="Clear" />
            </td>
            <td>
                &nbsp;</td>
            <td>
                <asp:TextBox ID="usernameTextBox" runat="server" 
                    Text='<%# Bind("username") %>' />
            </td>
            <td>
                <asp:TextBox ID="userpasstextBox" runat="server" 
                    Text='<%# Bind("userpass") %>' />
            </td>
        </tr>
    </InsertItemTemplate>
    <ItemTemplate>
        <tr>
            <td>
                <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" 
                    Text="Delete" />
                <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="Edit" />
            </td>
            <td>
                <asp:Label ID="useridLabel" runat="server" Text='<%# Eval("userid") %>' />
            </td>
            <td>
                <asp:Label ID="usernameLabel" runat="server" Text='<%# Eval("username") %>' />
            </td>
            <td>
                <asp:Label ID="userpassLabel" runat="server" Text='<%# Eval("userpass") %>' />
            </td>
        </tr>
    </ItemTemplate>
    <LayoutTemplate>
        <table runat="server">
            <tr runat="server">
                <td runat="server">
                    <table ID="itemPlaceholderContainer" runat="server" border="1">
                        <tr runat="server">
                            <th runat="server">
                            </th>
                            <th runat="server">
                                userid</th>
                            <th runat="server">
                                username</th>
                            <th runat="server">
                                userpass</th>
                        </tr>
                        <tr ID="itemPlaceholder" runat="server">
                        </tr>
                    </table>
                </td>
            </tr>
            <tr runat="server">
                <td runat="server">
                    <asp:DataPager ID="DataPager1" runat="server">
                        <Fields>
                            <asp:NextPrevIoUsPagerField ButtonType="Button" ShowFirstPageButton="True" 
                                ShowLastPageButton="True" />
                        </Fields>
                    </asp:DataPager>
                </td>
            </tr>
        </table>
    </LayoutTemplate>
    <SelectedItemTemplate>
        <tr>
            <td>
                <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" 
                    Text="Delete" />
                <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="Edit" />
            </td>
            <td>
                <asp:Label ID="useridLabel" runat="server" Text='<%# Eval("userid") %>' />
            </td>
            <td>
                <asp:Label ID="usernameLabel" runat="server" Text='<%# Eval("username") %>' />
            </td>
            <td>
                <asp:Label ID="userpassLabel" runat="server" Text='<%# Eval("userpass") %>' />
            </td>
        </tr>
    </SelectedItemTemplate>
</asp:ListView>

解决方法

在我的ItemTemplate / AlternatingItemTemplate(就像编辑模板)中更改非主键字段以使用“绑定”而不是“Eval”显然需要正确传递旧值.

这是一个使用自动生成的标记而没有完全理解它的情况(我仍然没有,真的.)

.net – SqlDataSource与ObjectDataSource

.net – SqlDataSource与ObjectDataSource

如果一个网页需要一些数据,为什么不只有一个sqlDataSource调用存储过程?为什么要使用ObjectDataSource调用一个业务对象,然后调用存储过程?我明白,构建在.net框架上的其他应用程序(让桌面应用程序)可以访问业务对象,但是如果应用程序永远只是一个Web应用程序呢?

要更清楚:

什么时候应该使用sqlDataSource或ObjectDataSource?

一个人如何激励选择?

解决方法

只有一个sqlDataSource才是完美的,如果它只是一个演示,一个原型,或一个快速的黑客.它很快,很容易,它只是工作,并给你你需要的结果.

然而,当应用程序长期设计和构建时,并且预期(要求,客户愿望,最终数据库模式)可能会改变,那么引入适当的“业务”层可能会更有意义 – 将业务对象建模为对象,然后提供从基础数据库到这些业务对象的映射.

俗话说 – 你可以通过一层间接(或抽象)来解决计算机科学中的任何事情 – 这同样适用.

确定:您可以直接访问数据库,并且确定首先和第一次迭代可能(或可能)最快的方式.但是从长远来看,当应用程序建成后,通常是一个快速而又脏的方式 – 维护成本,维护成本,根据您和您的客户需求进行更改所需的成本和工作将会增长而且很快,在努力的过程中,这种快速的解决方案看起来并不好看.

所以总结一下我的观点:是的,最初使用直接的sql数据源可能会更快更容易 – 所以使用它就是重要的一点:为快速演示,一个概念验证样式的应用程序完成任务.但从长远来看,当您看一下应用程序的使用寿命时,通常值得投入更多(设计和编码)的努力来添加这一层抽象,以便您的网页不直接依赖于下面的数据库.

渣子

ASP.NET 2.0:如何将asp:Menu绑定到SqlDataSource?

ASP.NET 2.0:如何将asp:Menu绑定到SqlDataSource?

我发现了如何将asp:Menu绑定到 XML.我已经找到了如何将asp:Menu绑定到站点地图(这实际上是将它绑定到XML).如何将asp:Menu绑定到数据库?

.NET Framework提供了多个数据源:

> HierarchicalDataSourceControl
>
> XmlDataSource

>
> SiteMapDataSource

> DataSourceControl
>
> SqlDataSource

>
> AccessDataSource

>
> LinqDataSource

我想使用一个表示sql Server表中的数据.数据以每个人使用的标准hierarchical格式存储:

NodeID    ParentNodeID    Caption        Url
========  ==============  =========      =================
{3234...  {3632...        stackoverflow  http://stackov...
{3632...  (null)          Questions      ~/questions.aspx
{3233...  (null)          Tags           ~/tags.aspx
{3235...  {3632...        google         http://www.goo...

返回所有行的查询将是:

SELECT * FROM Nodes

微软打算用什么方法将这些数据混合到asp:Menu中?

更新:aspalliance.com上有一篇很好的文章:Building a Database Driven Hierarchical Menu using ASP.NET 2.0.不幸的是,它描述了如何执行XML数据绑定;而我对数据库绑定感兴趣.

解决方法

该菜单不支持绑定到sqlDataSource,因为它是HierarchicalDataBoundControl – 仅支持分层数据源.您应该实现自己的HierarchicalDataSourceControl.查看 here以获取示例.或者,您可以创建自定义站点地图提供程序并使用SiteMapDataSource,如演示 here.最后,您可以使用可以绑定到sqlDataSource的 a 3’rd party control.

ASP.NET – DataSourceID和DataSource有什么区别?

ASP.NET – DataSourceID和DataSource有什么区别?

DataSourceID和DataSource与控件的属性有什么区别?我可以互换使用吗?

当我在设计时尝试设置DataSource属性时,通过在aspx页面上输入,我收到一个异常,表示“DataSource”属性不能声明地设置.但是当我使用属性窗口来更改DataSource时,它不会有异常.

解决方法

DataSource是指实际的数据源对象,可以是.NET提供的数据源控件(如ObjectDataSource,sqlDataSource)或实际的数据对象,如DataTable,对象集合等.

DataSourceID是.NET提供的数据源控件的字符串标识符,并且此属性存在,以便数据绑定控件和相应的数据源可以在设计时与标记相关联.在内部,控件将使用所提供的id来查找实际的数据源控件.

asp.net – ObjectDataSource删除问题

asp.net – ObjectDataSource删除问题

环境:asp.net框架2.0

我在自定义对象上遇到Delete方法和ObjectDataSource问题. Select,Insert和Update方法工作正常.

这是类的代码:

public class Car
{
    public string ID {get; set;}//I kNow this is 3.0+ Syntax.
    public string Description {get; set;}//I kNow this is 3.0+ Syntax.

    public bool Equals(Car other)
    {
        if (ReferenceEquals(null,other)) return false;
        if (ReferenceEquals(this,other)) return true;
        return other.ID == ID;
    }

    public override bool Equals(object obj)
    {
        if (ReferenceEquals(null,obj)) return false;
        if (ReferenceEquals(this,obj)) return true;
        return obj.GetType() == typeof (Car) && Equals((Car) obj);
    }

    public override int GetHashCode()
    {
        return ID;
    }
}

public class CarList
{
    private static List<Car> _cars;

    public CarList()
    {
        if(_cars == null) 
            _cars = new List<Car>();

        //Create some cars and insert them here...
    }

    public List<Car> Select()
    {
        return _cars;
    }

    public void Update(Car updatedCar)
    {
        int i = _cars.IndexOf(updatedCar);
        if(i != -1)
        {
            _cars[i] = updatedCar;
        }
    }

    public void Insert(Car insertedCar)
    {
        _cars.Add(insertedCar);
    }

    public void Delete(Car deletedCar)
    {
        _cars.Remove(deletedCar);
    }
}

这是ObjectDataSource和DetailsView的代码:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    DataObjectTypeName="Car"
    TypeName="CarList"
    DeleteMethod="Delete" 
    InsertMethod="Update" 
    SelectMethod="Select" 
    UpdateMethod="Update">
</asp:ObjectDataSource>

<asp:DetailsView ID="DetailsView1" runat="server" AllowPaging="True" AutoGenerateRows="False"
    CellPadding="4" DataSourceID="ObjectDataSource1" ForeColor="#333333" GridLines="None"
    Height="50px" Width="125px">
    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <CommandRowStyle BackColor="#D1DDF1" Font-Bold="True" />
    <RowStyle BackColor="#EFF3FB" />
    <FieldHeaderStyle BackColor="#DEE8F5" Font-Bold="True" />
    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
    <Fields>
        <asp:BoundField datafield="Id" HeaderText="Id" />
        <asp:BoundField datafield="Description" HeaderText="Model" />
        <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" />
    </Fields>
    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <EditRowStyle BackColor="#2461BF" />
    <AlternatingRowStyle BackColor="White" />
</asp:DetailsView>

当我尝试删除一个Item并对方法Delete执行调试时,它的参数为deletedCar,如下所示:

ID = 0
说明= NULL

但是,当我对Update或Insert Methods执行调试时,Car对象正确填充了正确的数据.

到底是怎么回事?

解决方法

在DetailsView中设置DataKeyNames(主键属性).

<asp:DetailsView DataKeyNames="ID" />

我们今天的关于使用SqlDataSource删除空字典错误 – ASP.net ListView的分享已经告一段落,感谢您的关注,如果您想了解更多关于.net – SqlDataSource与ObjectDataSource、ASP.NET 2.0:如何将asp:Menu绑定到SqlDataSource?、ASP.NET – DataSourceID和DataSource有什么区别?、asp.net – ObjectDataSource删除问题的相关信息,请在本站查询。

本文标签: