sqlcommand ausführen der Abfrage nicht aktualisieren, löschen und einfügen
Hallo, ich benutze immer SQlcommand für Abfrage nicht, aber jetzt etwas falsch, ich weiß nicht, was ich habe 3 buttons mit den Operationen update, einfügen und löschen, aber ich erstellt einzigartige Methode für alle 3 Operationen, das problem ist es nicht einfügen, löschen oder aktualisieren:
private void operacao(String operacao) {
String comando = "";
con = new SqlConnection();
WorksDataSet dataset = new WorksDataSet();
con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Works.mdf;Integrated Security=True;User Instance=True;Asynchronous Processing=true";
try
{
con.Open();
}
catch (SqlException cox) {
MessageBox.Show(cox.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
switch (operacao) {
case "inserir":
try
{
comando = "Insert Into Estudante (Codigo,Nome,Apelido) values(" + txtID.Text + ",'" + txtNome.Text + "','" + txtapelido.Text + "')";
SqlCommand command = new SqlCommand(comando, con);
SqlDataAdapter sda=new SqlDataAdapter(command);
command.CommandType = CommandType.Text;
sda.Fill(dataset);
command.ExecuteNonQuery();
command.Dispose();
MessageBox.Show("Adicionado com Sucesso", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (SqlException sex) {
MessageBox.Show(sex.Message , this.Text,MessageBoxButtons.OK,MessageBoxIcon.Error );
}
break;
case "apagar":
comando = "delete from Estudante where Codigo=" + txtID;
try
{
SqlCommand command = new SqlCommand(comando, con);
command.BeginExecuteNonQuery();
MessageBox.Show("Removido com Sucesso", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (SqlException sex)
{
MessageBox.Show(sex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
break;
case "atualizar":
comando = "update table Estudante set nome='" + txtNome + "'^ apelido='" + txtapelido + "'";
try
{
SqlCommand command = new SqlCommand(comando, con);
command.BeginExecuteNonQuery();
MessageBox.Show("Actualizado com Sucesso", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (SqlException sex)
{
MessageBox.Show(sex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
break;
default:
break
;
}
con.Close();
}
- warum verwenden Sie BeginExecuteNonQuery?
- wow.. catch (SqlException sex) und MessageBox.Zeigen(sex.Nachricht... scheint sehr interessant.. 🙂
- ist es das werfen einer exception oder seine nicht in switch-case, wie Sie mit Hilfe string in switch-Case-Anweisungen. so bestätigen Sie bitte..?
- haben Sie überprüft Ihre sql-Anweisungen direkt? (z.B. im sql management studio)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie verwenden parametrisierten Abfrage. IMMER.....
diese für die insert-op.
Keine Notwendigkeit, verwenden Sie ein dataset oder ein dataadapter hier. nur die ExecuteNonQuery -
diese für die delete-op.
Beachten Sie, dass Sie sollten geben Sie den Text-Eigenschaft, nicht die ganze TextBox
diese für das update op
Hier auch, verwenden Sie die Text-Eigenschaft nicht die TextBox-Objekt
In dieser Weise müssen Sie nicht befürchten muss, zitiert in Ihrem string params und schließen Sie die Tür, um
Sql-Injection-Angriffe
Ausführen
insert/delete/update
- Anweisung, die Sie gerade brauchen, um erstellenSqlCommand
undSqlConnection
Objekt.DataSet
undDataAdapter
nutzlos sind.Einfügen einer Zeile:
Copy To Output Directory=Copy if newer
Sind Sie aufrufen der sqlDataAtapter die Fill-Methode zum füllen der Datenbank, das ist unnötig. entfernen Sie diese Aussage und sehen. Das sollte funktionieren.