2009-10-05 54 views
0

我试图从GridView和数据库中删除的行... 如果delte的LinkBut​​ton被点击GridView中的应删除.. 我刚开行指标如下:删除行从选择GridView和数据库

protected void LinkButton1_Click(object sender, EventArgs e) 
{ 
    LinkButton btn = (LinkButton)sender; 
    GridViewRow row = (GridViewRow)btn.NamingContainer; 
    if (row != null) 
    { 
    LinkButton LinkButton1 = (LinkButton)sender; 

    // Get reference to the row that hold the button 
    GridViewRow gvr = (GridViewRow)LinkButton1.NamingContainer; 

    // Get row index from the row 
    int rowIndex = gvr.RowIndex; 
    string str = rowIndex.ToString(); 
    //string str = GridView1.DataKeys[row.RowIndex].Value.ToString(); 
    RemoveData(str); //call the delete method 

    } 
} 

现在我想删除它.​​..所以我有这个代码的问题..我得到一个错误

必须声明标量变量“@original_MachineGroupName” ...任何建议

private void RemoveData(string item) 
{ 
    SqlConnection conn = new SqlConnection(@"Data Source=JAGMIT-PC\SQLEXPRESS; 
    Initial Catalog=SumooHAgentDB;Integrated Security=True"); 
    string sql = "DELETE FROM [MachineGroups] WHERE [MachineGroupID] = 
       @original_MachineGroupID; 
    SqlCommand cmd = new SqlCommand(sql, conn); 
    cmd.Parameters.AddWithValue("@original_MachineGroupID", item); 

    conn.Open(); 

    cmd.ExecuteNonQuery(); 
    conn.Close(); 
} 

块引用

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:SumooHAgentDBConnectionString %>" 
    SelectCommand="SELECT MachineGroups.MachineGroupID, MachineGroups.MachineGroupName, 
    MachineGroups.MachineGroupDesc, MachineGroups.TimeAdded, 
    MachineGroups.CanBeDeleted, COUNT(Machines.MachineName) AS Expr1, 
    DATENAME(month, (MachineGroups.TimeAdded - 599266080000000000)/864000000000) + 
    SPACE(1) + DATENAME(d, (MachineGroups.TimeAdded - 599266080000000000)/
    864000000000) + 
    ', ' + DATENAME(year, (MachineGroups.TimeAdded - 599266080000000000)/
    864000000000) AS Expr2 FROM MachineGroups FULL OUTER JOIN Machines ON 
    Machines.MachineGroupID = MachineGroups.MachineGroupID GROUP BY 
    MachineGroups.MachineGroupID, MachineGroups.MachineGroupName, 
    MachineGroups.MachineGroupDesc, MachineGroups.TimeAdded, 
    MachineGroups.CanBeDeleted" 
    DeleteCommand="DELETE FROM [MachineGroups] WHERE 
        [MachineGroupID] [email protected]_MachineGroupID" > 
     <DeleteParameters> 
      <asp:Parameter Name="@original_MachineGroupID" Type="Int16" /> 
      <asp:Parameter Name="@original_MachineGroupName" Type="String" /> 
      <asp:Parameter Name="@original_MachineGroupDesc" Type="String" /> 
      <asp:Parameter Name="@original_CanBeDeleted" Type="Boolean" /> 
      <asp:Parameter Name="@original_TimeAdded" Type="Int64" /> 
     </DeleteParameters> 
</asp:SqlDataSource> 

我仍然得到一个错误:必须声明标量变量 “@original_MachineGroupID

回答

0

你不加入一个@original_MachineGroupName参数查询。您的查询引用了多个变量,并且您只添加了其中一个变量。

cmd.Parameters.AddWithValue("@original_MachineGroupID", item); 
cmd.Parameters.AddWithValue("@original_MachineGroupName", itemName); 
cmd.Parameters.AddWithValue("@original_MachineGroupDesc", itemDesc); 
cmd.Parameters.AddWithValue("@original_CanBeDeleted", true); 
cmd.Parameters.AddWithValue("@original_TimeAdded", time); 

您需要找到额外信息来满足您的查询,否则请更改您的查询以删除对它们的需求。

+0

所以我需要通过所有的值像itemname,itemdesc等..单独?? ??我只是将行号删除.. 有没有更简单的方法来做到这一点.. 谢谢 – user175084 2009-10-05 17:25:43

+0

那么,您的删除查询是专门检查这些事情。我的猜测是,如果没有所有这些信息,行就无法被唯一标识。您必须简化删除查询以仅需要该ID,否则您必须将所需的所有信息传递给它。 – womp 2009-10-05 18:04:40

+0

我已经简化了上面的删除查询..它不会删除..这是删除行的唯一方法...请帮助 – user175084 2009-10-05 18:06:37

0

您在查询中有几个参数,即@original_MachineGroupName,但仅向您的命令对象添加一个实际参数。查询中的每个参数都需要一个。

+0

有没有一个简单的方法来做到这一点...任何示例或链接将是伟大的.. – user175084 2009-10-05 17:46:09

0

下面的代码会从数据库中删除行,如果要传递到方法的字符串是在表中的主键或唯一键:

string sql = "DELETE FROM [MachineGroups] WHERE [MachineGroupID] = 
        @original_MachineGroupID"; 
    SqlCommand cmd = new SqlCommand(sql, conn); 
    cmd.Parameters.AddWithValue("@original_MachineGroupID", item); 
+0

先生我试过这个命令..它仍然没有工作.. 我知道命令是正确的...仍然可以帮助我.. 是否有一些概率与我的.aspx页面? 我已经在上面张贴了代码.. – user175084 2009-10-05 17:41:41

0

注意你的绑定也。如果从数据库中删除一行,那不会从gridview中删除数据。您将需要重新获取数据并重新绑定数据。

+0

先生删除功能本身不工作..请你可以告诉我一个简单的方法来做到这一点... 我不知道为什么有什么不工作? – user175084 2009-10-05 17:56:40

+0

主要问题,我认为它没有得到它必须删除的机器组ID ... insted它获取行号..所以当我光滑删除似乎没有发生... – user175084 2009-10-05 17:58:50