数据库结构:
用户名 nvarchar(50) 主键
姓名 nvarchar(50)
住址 nvarchar(50)
在使用GridView控件和DetailsView控件进行更新和删除时发现,只有当每个字段都有值时才能正常更新和删除,有一个为空就无效?请问大家如何解决?????????????
用户名 nvarchar(50) 主键
姓名 nvarchar(50)
住址 nvarchar(50)
在使用GridView控件和DetailsView控件进行更新和删除时发现,只有当每个字段都有值时才能正常更新和删除,有一个为空就无效?请问大家如何解决?????????????
我也想过设置默认值的问题。但根据sql语言应该不会有这样的事情发生呀。请问什么是rpwt?????
我上网找找
我用的是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>
发表于: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 编号 = ?"