C# 将datakeyname添加到sql参数

C# 将datakeyname添加到sql参数,c#,asp.net,sql,gridview,C#,Asp.net,Sql,Gridview,在我的gridview上,我想激活delete按钮。我已将delete按钮添加到gridview,并将DeleteCommand添加到SqlDataSource <asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommand="SELECT rowNumber, firstName as 'Fornavn' where shopID=@pageid order by firstName asc" Delete

在我的gridview上,我想激活delete按钮。我已将delete按钮添加到gridview,并将
DeleteCommand
添加到
SqlDataSource

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommand="SELECT rowNumber,  firstName as 'Fornavn' where shopID=@pageid order by firstName asc" DeleteCommand="DELETE FROM [sydShopOrder] WHERE rowNumber=@rowNumber">
    <SelectParameters><asp:QueryStringParameter Name="pageid" QueryStringField="id"/> </SelectParameters>

</asp:SqlDataSource>

如您所见,我可以从QueryStringField添加
SelectParameters
pageid。现在我想再添加一个
DeleteParameters
到这个
asp:SqlDataSource
,它是
@rowNumber
,这是我的
datakeyname
用于gridview。我如何将这个
datakeyname
添加到sql<代码>删除参数


或者有更好的方法吗?我缺少的东西

您的GridView定义中是否有
DataKeyNames=“pageid”
?如果已将此列设置为表的主键,则应自动将其包含在GridView中

确保你的主键通过了思考

  • DataKeyNames,包括您的pk,以及select命令中的值

  • 删除/更新paramname,将您的DataKeyName包括在parametername中

  • 使用param作为where条件,其中primarykeyfield=@paramname


  • 在GridView定义中是否有
    DataKeyNames=“pageid”
    ?如果已将此列设置为表的主键,则应自动将其包含在GridView中

    确保你的主键通过了思考

  • DataKeyNames,包括您的pk,以及select命令中的值

  • 删除/更新paramname,将您的DataKeyName包括在parametername中

  • 使用param作为where条件,其中primarykeyfield=@paramname

  • 在删除(以及更新)操作期间,数据绑定控件将当前和原始记录值传递给
    SqlDataSource
    控件。当前值在值字典中传递。原始值在键或旧值字典中传递

    这意味着,如果
    rowNumber
    实际上是一列,并且应该用作delete命令中的参数,只需将delete命令设置为:

    "DELETE FROM [sydShopOrder] WHERE rowNumber=@rowNumber"
    
    只要为每个参数指定与其影响的字段相同的名称,并在其前面加上
    @
    符号(这样
    FirstName
    就变成
    @FirstName
    ),就不需要定义参数。 这是因为ASP.NET数据控件会在触发更新之前自动提交一组具有新值的参数。集合中的每个参数都使用此命名约定

    一种特殊情况是,当您要删除数据时,其他用户可能会更改相同的数据,因此在这种情况下,您可能不想删除它

    在这种情况下,请将SqlDataSource的属性:
    OldValuesParameterFormatString
    用作:

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      SelectCommand="SELECT rowNumber,  firstName as 'Fornavn' 
                     where shopID=@pageid order by firstName asc" 
      DeleteCommand="DELETE FROM [sydShopOrder] WHERE rowNumber=@original_rowNumber">
      OldValuesParameterFormatString="original_{0}"  
    > 
    </asp:SqlDataSource> 
    

    在删除(以及更新)操作期间,数据绑定控件将当前和原始记录值传递给
    SqlDataSource
    控件。当前值在值字典中传递。原始值在键或旧值字典中传递

    这意味着,如果
    rowNumber
    实际上是一列,并且应该用作delete命令中的参数,只需将delete命令设置为:

    "DELETE FROM [sydShopOrder] WHERE rowNumber=@rowNumber"
    
    只要为每个参数指定与其影响的字段相同的名称,并在其前面加上
    @
    符号(这样
    FirstName
    就变成
    @FirstName
    ),就不需要定义参数。 这是因为ASP.NET数据控件会在触发更新之前自动提交一组具有新值的参数。集合中的每个参数都使用此命名约定

    一种特殊情况是,当您要删除数据时,其他用户可能会更改相同的数据,因此在这种情况下,您可能不想删除它

    在这种情况下,请将SqlDataSource的属性:
    OldValuesParameterFormatString
    用作:

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      SelectCommand="SELECT rowNumber,  firstName as 'Fornavn' 
                     where shopID=@pageid order by firstName asc" 
      DeleteCommand="DELETE FROM [sydShopOrder] WHERE rowNumber=@original_rowNumber">
      OldValuesParameterFormatString="original_{0}"  
    > 
    </asp:SqlDataSource> 
    

    希望这对你有帮助我的意见是用codebehind做所有事情希望这对你有帮助我的意见是用codebehind做所有事情。。