SqlDataSource WEB控件:当DeleteCommandType="storedProcedure"时

设计
Users表:UserID,Name
Articles表:ArticleID,UserID,ArticleTitle
生成视图:
SELECT      dbo.Articles.ArticleID, dbo.Articles.ArticleTitle, dbo.Users.Name
FROM          dbo.Articles  INNER   JOIN
                      dbo.Users 
ON  dbo.Articles.UserID  =  dbo.Users.UserID

写一条执行删除的StoredProcedure:

CREATE   PROCEDURE  dbo.DeleteArticle 
@a   int
AS
    
delete   from  Articles  where  ArticleID  =   @a
    
RETURN


在aspx页面上,增加GridView,并指定数据源SqlDataSource

通过向导生成的SqlDataSource1:
    <asp:SqlDataSource ID="SqlDataSource1" runat="server"
    ConnectionString="<%$ ConnectionStrings:DataTesterConnectionString %>"
     SelectCommand="SELECT * FROM [ViewArticles]"
      DeleteCommand="DeleteArticle"
    DeleteCommandType="StoredProcedure">
        <DeleteParameters>
            <asp:Parameter Name="a" Type="Int32" />
        </DeleteParameters>
    </asp:SqlDataSource>

通过向导生成的GridView1,并增加删除按钮列:
    <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1">
        <Columns>
            <asp:CommandField ShowDeleteButton="True" />
        </Columns>
    </asp:GridView>

如MSDN所述:为了使 GridView 控件的自动更新和删除功能工作,必须设置 DataKeyNames 属性。
加入ArticleID作为主键
    <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="ArticleID">
        <Columns>
            <asp:CommandField ShowDeleteButton="True" />
        </Columns>
    </asp:GridView>

F5,执行了一下,"为过程或函数 DeleteArticle 指定的参数太多。 "

靠,就一个参数也不对?
利用cs编码有很多种方法实现这一过程,现在就较上劲了就不想写代码,怎么办?
在接下来的N久时间里,我无数次的试验,终于这样搞定了:

     < asp:SqlDataSource  ID ="SqlDataSource1"  runat ="server"  
    ConnectionString
="<%$ ConnectionStrings:DataTesterConnectionString %>"
     SelectCommand
="SELECT * FROM [ViewArticles]"
      OldValuesParameterFormatString
="a"
      DeleteCommand
="DeleteArtile"
    DeleteCommandType
="StoredProcedure" >
        
< DeleteParameters >
            
< asp:Parameter  Name ="a"  Type ="Int32"   />
        
</ DeleteParameters >
    
</ asp:SqlDataSource >

关键是OldValuesParameterFormatString="a"这句!

或者干脆把
        <DeleteParameters>
            <asp:Parameter Name="a" Type="Int32" />
        </DeleteParameters>
这些都去掉,照样能很好的工作!

在网上找了N久都没有找到解决办法,希望对有同样问题的人有些用处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值