InBlock.gif<asp:SqlDataSource ID= "SqlDataSource1" runat= "server" ConnectionString= "<%$ ConnectionStrings:voteConnectionString %>"
InBlock.gif     SelectCommand= "SELECT id, voteTitle, voteSum FROM voteMaster"    
InBlock.gif     UpdateCommand= "UPDATE voteMaster SET voteTitle = @voteTitle WHERE id=@id"
InBlock.gif     InsertCommand= "INSERT INTO voteMaster(voteTitle) VALUES (@voteTitle)"
InBlock.gif     DeleteCommand= "DELETE FROM voteDetails WHERE id=@id;DELETE FROM voteMaster WHERE id=@id">
InBlock.gif     <UpdateParameters>
InBlock.gif            <asp:Parameter Name= "voteTitle" Type= "String" />
InBlock.gif            <asp:Parameter Name= "id" Type= "int32" />
InBlock.gif     </UpdateParameters>
InBlock.gif     <InsertParameters>
InBlock.gif            <asp:FormParameter Name= "voteTitle" FormField= "txtTitle" />
InBlock.gif     </InsertParameters>
InBlock.gif     <DeleteParameters>
InBlock.gif            <asp:Parameter Name= "id" Type= "int32" />
InBlock.gif     </DeleteParameters>
InBlock.gif</asp:SqlDataSource>
 
在使用GridView对以上绑定的数据源进行更新和删除操作时,提示以下错误:
必须声明变量     '@ID'。

说明:     执行当前     Web     请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。            
        
异常详细信息:     System.Data.SqlClient.SqlException:     必须声明变量     '@ID'。        
        
源错误:            
        
执行当前     Web     请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
 
而选取和插入操作正常,经过排查,发现应该和SQL语句中的条件 '@ID'有关,在网上查找有关资料,在 Update 和 Delete 操作中扮演特殊角色的一个重要属性是 DataKeyNames 属性。此属性通常被设置为数据源中字段的名称,这些字段是用于匹配该数据源中的给定行的主键的一部分。
 
解决办法:在GridView中加入DataKeyNames="id"属性,以上操作就能正常运行了。