数据库结构:
用户名      nvarchar(50)   主键
姓名        nvarchar(50)
住址        nvarchar(50)
在使用GridView控件和DetailsView控件进行更新和删除时发现,只有当每个字段都有值时才能正常更新和删除,有一个为空就无效?请问大家如何解决?????????????

解决方案 »

  1.   

    应该不会出现这样的问题吧,你的空值等到显示的时候就已经是""了阿,那里还有null阿?
      

  2.   

    代码是自动生成的,应该没问题。数据库是null
    我也想过设置默认值的问题。但根据sql语言应该不会有这样的事情发生呀。请问什么是rpwt?????
    我上网找找
      

  3.   

    晕,一二楼的说得有趣
    我用的是vs2005  中文版的。
    不知道大家用的是什么?
    刚才看到vs2005 sp1了,不知道有没有用//代码如下
            <asp:DetailsView ID="DetailsView1" runat="server" AllowPaging="True" AutoGenerateRows="False"
                DataKeyNames="编号" DataSourceID="SqlDataSource1" Height="50px" Width="125px">
                <Fields>
                    <asp:BoundField DataField="编号" HeaderText="编号" InsertVisible="False" ReadOnly="True"
                        SortExpression="编号" />
                    <asp:BoundField DataField="学号" HeaderText="学号" SortExpression="学号" />
                    <asp:BoundField DataField="密码" HeaderText="密码" SortExpression="密码" />
                    <asp:CheckBoxField DataField="可用否" HeaderText="可用否" SortExpression="可用否" />
                    <asp:BoundField DataField="姓名" HeaderText="姓名" SortExpression="姓名" />
                    <asp:BoundField DataField="性别" HeaderText="性别" SortExpression="性别" />
                    <asp:BoundField DataField="字段1" HeaderText="字段1" SortExpression="字段1" />
                    <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" />
                </Fields>
            </asp:DetailsView>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues"
                ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\ASP.NET_2.0学习\baseuser.mdb"
                DeleteCommand="DELETE FROM [b1] WHERE [编号] = ? AND [学号] = ? AND [密码] = ? AND [可用否] = ? AND [姓名] = ? AND [性别] = ? AND [字段1] = ?"
                InsertCommand="INSERT INTO [b1] ([编号], [学号], [密码], [可用否], [姓名], [性别], [字段1]) VALUES (?, ?, ?, ?, ?, ?, ?)"
                OldValuesParameterFormatString="original_{0}" ProviderName="System.Data.OleDb"
                SelectCommand="SELECT [编号], [学号], [密码], [可用否], [姓名], [性别], [字段1] FROM [b1]" UpdateCommand="UPDATE [b1] SET [学号] = ?, [密码] = ?, [可用否] = ?, [姓名] = ?, [性别] = ?, [字段1] = ? WHERE [编号] = ? AND [学号] = ? AND [密码] = ? AND [可用否] = ? AND [姓名] = ? AND [性别] = ? AND [字段1] = ?">
                <DeleteParameters>
                    <asp:Parameter Name="original_编号" Type="Int32" />
                    <asp:Parameter Name="original_学号" Type="String" />
                    <asp:Parameter Name="original_密码" Type="String" />
                    <asp:Parameter Name="original_可用否" Type="Boolean" />
                    <asp:Parameter Name="original_姓名" Type="String" />
                    <asp:Parameter Name="original_性别" Type="String" />
                    <asp:Parameter Name="original_字段1" Type="String" />
                </DeleteParameters>
                <UpdateParameters>
                    <asp:Parameter Name="学号" Type="String" />
                    <asp:Parameter Name="密码" Type="String" />
                    <asp:Parameter Name="可用否" Type="Boolean" />
                    <asp:Parameter Name="姓名" Type="String" />
                    <asp:Parameter Name="性别" Type="String" />
                    <asp:Parameter Name="字段1" Type="String" />
                    <asp:Parameter Name="original_编号" Type="Int32" />
                    <asp:Parameter Name="original_学号" Type="String" />
                    <asp:Parameter Name="original_密码" Type="String" />
                    <asp:Parameter Name="original_可用否" Type="Boolean" />
                    <asp:Parameter Name="original_姓名" Type="String" />
                    <asp:Parameter Name="original_性别" Type="String" />
                    <asp:Parameter Name="original_字段1" Type="String" />
                </UpdateParameters>
                <InsertParameters>
                    <asp:Parameter Name="编号" Type="Int32" />
                    <asp:Parameter Name="学号" Type="String" />
                    <asp:Parameter Name="密码" Type="String" />
                    <asp:Parameter Name="可用否" Type="Boolean" />
                    <asp:Parameter Name="姓名" Type="String" />
                    <asp:Parameter Name="性别" Type="String" />
                    <asp:Parameter Name="字段1" Type="String" />
                </InsertParameters>
            </asp:SqlDataSource>
      

  4.   

    问题出在DeleteCommand,updatecommand等命令的where条件包含了所有字段,所以空值时无法更新或删除。只要改为where仅指向关键字段就可以了。
      

  5.   

    zergfoot 
    发表于:2008-11-02 09:09:3012楼 得分:0 
    问题出在DeleteCommand,updatecommand等命令的where条件包含了所有字段,所以空值时无法更新或删除。只要改为where仅指向关键字段就可以了。 上面的回答是对的.其他的回答都是不懂的说的闲话.
    详细的原因是.你在,插入,删除,修改的时候,当遇到数据库记录中有null空直的时候,因为where条件不成立,即没有找到符合条件的记录,所以你的插入.修改.删除语句.根本就没有在这条有空的记录上产生作用.因为他没有找到符合条件的记录.所以它就没有任何的反映.那么什么情况下有可能会出现错误的提示..这个就和你的数据库设计有关系了.比如你有个叫数据库自动生成的默然的编号.当你去插入,删除,修改的时候.有可能同时去更改其编号.而这个字段数据库是自动生成的.是不允许你自己添的时候,就回出现错误提示.多看where条件判断.
    UpdateCommand="UPDATE 表1 SET amdb = ?, bmdb = ?, cmdb = ? WHERE (编号 = ?) AND (amdb = ?) AND (bmdb = ?) AND (cmdb = ?)" 
     UpdateCommand="UPDATE 表1 SET amdb = ?, bmdb = ?, cmdb = ? WHERE 编号 = ?" 
    DeleteCommand="DELETE FROM 表1 WHERE (编号 = IIF(isnull(?), NULL, 编号)) AND (amdb = IIF(isnull(?), NULL, amdb)) AND (bmdb = IIF(isnull(?), NULL, bmdb)) AND (cmdb = IIF(isnull(?), NULL, cmdb))" 
     DeleteCommand="DELETE FROM 表1 WHERE 编号 = ?" 
      

  6.   

    不知道楼主的问题解决了没有,我碰到类似的问题,但原因跟楼主不一样。是我的数据源刷新了,但是gridview架构没有刷新