удалить строку из выбранного вида сетки и базы данных - PullRequest
0 голосов
/ 05 октября 2009

Я пытаюсь удалить строку из таблицы и базы данных ... Он должен быть удален, если щелкнуть по кнопке delte link в окне сетки. Я получаю индекс строки следующим образом:

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();
}

Blockquote

<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] =@original_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"

Ответы [ 4 ]

0 голосов
/ 05 октября 2009

Смотрите также свою привязку данных. Если вы удалите строку из базы данных, это не удалит данные из таблицы. Вам нужно будет повторно извлечь ваши данные и снова связать их с данными.

0 голосов
/ 05 октября 2009

У вас есть несколько параметров в вашем запросе, т.е. @original_MachineGroupName, но вы добавляете только один фактический параметр в объект вашей команды. Вам понадобится один для каждого параметра в запросе.

0 голосов
/ 05 октября 2009

Следующий код удалит строку из базы данных, если передаваемая в метод строка является первичным или уникальным ключом в таблице:

string sql = "DELETE FROM [MachineGroups] WHERE [MachineGroupID] = 
                  @original_MachineGroupID";
    SqlCommand cmd = new SqlCommand(sql, conn);
    cmd.Parameters.AddWithValue("@original_MachineGroupID", item);
0 голосов
/ 05 октября 2009

Вы не добавляете параметр @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);

Вам нужно будет найти дополнительную информацию, чтобы удовлетворить ваш запрос, или изменить свой запрос, чтобы устранить необходимость в них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...