Wie Sie wiederverwenden SqlCommand-parameter durch jede iteration?
Will ich implementieren Sie ein einfaches löschen-Knopf für meine Datenbank. Die Ereignis-Methode sieht ungefähr so aus:
private void btnDeleteUser_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Are you sure?", "delete users",MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
{
command = new SqlCommand();
try
{
User.connection.Open();
command.Connection = User.connection;
command.CommandText = "DELETE FROM tbl_Users WHERE userID = @id";
int flag;
foreach (DataGridViewRow row in dgvUsers.SelectedRows)
{
int selectedIndex = row.Index;
int rowUserID = int.Parse(dgvUsers[0,selectedIndex].Value.ToString());
command.Parameters.AddWithValue("@id", rowUserID);
flag = command.ExecuteNonQuery();
if (flag == 1) { MessageBox.Show("Success!"); }
dgvUsers.Rows.Remove(row);
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
finally
{
if (ConnectionState.Open.Equals(User.connection.State))
User.connection.Close();
}
}
else
{
return;
}
}
aber ich bekomme diese Meldung:
Variable @id deklariert wurde. Variablennamen müssen eindeutig sein innerhalb
eine Abfrage, der batch oder die gespeicherte Prozedur.
Gibt es eine Möglichkeit zur Wiederverwendung dieser Variablen?
InformationsquelleAutor der Frage miller | 2012-08-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Parameters.AddWithValue
fügt einen neuen Parameter zu dem Befehl. Seit du tust dass in einer Schleife mit dem gleichen Namen, Sie sind immer die Ausnahme "Variablennamen müssen eindeutig sein".So brauchen Sie nur einen parameter, fügen Sie es vor der Schleife, und ändern Sie nur den Wert in der Schleife.
Andere Möglichkeit ist die Verwendung
- Befehl.Parameter.Clear();
ersten. Dann können Sie auch hinzufügen, die parameter(s) in der Schleife, ohne dass die gleichen parameter zweimal.InformationsquelleAutor der Antwort Tim Schmelter
Statt:
Etwas wie:
Außerhalb der foreach-Schleife, und nur manuell gesetzt innerhalb der Schleife:
InformationsquelleAutor der Antwort Cashley
Fehler ist, weil Sie mit dem hinzufügen der gleichen parameter wieder und wieder in jeder iteration der Schleife.
Ich würde zu bewegen, dass code, einer eigenen Methode, so dass ich nennen kann aus mehreren stellen, wie gebraucht.
Dann nennen mag
InformationsquelleAutor der Antwort Shyju