SQL-Kommando INSERT arbeiten, aber die Daten erscheinen nicht in der Tabelle
Ich bin ausgeführte SQL-Befehl INSERT
so in meinem Visual C#.NET mit dem MS VS 2010 Express Edition:
private void btnAdd_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(Properties.Settings.Default.loginDBConnectionString);
con.Open();
SqlCommand cmd = new SqlCommand("INSERT INTO tblEmp (ID, firstname, lastname, email, position) VALUES ('"+textBox1.Text+"','"+textBox2.Text+"', '"+textBox3.Text+"', '"+textBox4.Text+"', '"+comboBox1.Text+"')", con);
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("Data Added!");
}
Beim ausführen dieser, die MessageBox
auftauchte, was bedeutet, dass die Ausführung erfolgreich war. Aber, wenn ich überprüft auf dem Tisch , die Daten, die ich versuche zu legen, bevor nicht angezeigt.
Ich habe eine Datenbank (loginDB.mdf
) mit 2 Tischen innen :
- TblLogin
- enthält username
und password
für login-Zwecke, die erfolgreich ausgeführt.
- tblEmp
- enthält die Daten des Mitarbeiters, das ist die, die ich habe versucht, in die Daten eingefügt werden.
Was ich nicht verstehe, ist, warum die MessageBox
angezeigt, wenn in der Tat nichts eingefügt in meine tblEmp
.
BEARBEITEN : ConnectionString
zu loginDB.mdf
:
Data Source=.\SQLEXPRESS;AttachDbFilename="C:\Users\Andreas\documents\visual studio 2010\Projects\LoginApplication\LoginApplication\loginDB.mdf";Integrated Security=True;User Instance=True
Der name der Datenbank ist loginDB.mdf
statt logindatabase.mdf
wie bereits geschrieben. Ich geändert es zu loginDB.mdf
nur um es zu testen, aber noch keine änderungen angezeigt.
Ist
ID
eine identity-Spalte, die automatisch erzeugt Wert legen? Verwenden Sie immer parametrisierte Abfragen anstelle des string-Verkettung zu erstellen Sie Ihre sql-Abfragen. Ansonsten ypou sind anfällig für sql-injection.Erste, was zu tun, abgesehen von allem anderen: stop-erstellen von SQL-so. Verwendung von parametrisierten SQL zur Vermeidung von SQL-injection-Angriffen, vermeiden Sie conversion-Probleme und machen den code lesbarer zu gestalten.
Sollten Sie immer parametrisierte Abfragen. Diese Art von string-Verkettungen sind offen für SQL-Injection - Angriffe. Haben Sie jemals überprüfen den Rückgabewert für
ExecuteNonQuery
Methode? Es gibt 1
genau? Was ist deine Variablen? Hast du mal versucht die Abfrage in Ihrer Datenbank-manager zuerst?Auch sollten Sie verwenden
using
Konstruktion für SqlConnection
(und für andere IDisposable
s).InformationsquelleAutor Andreas Adhiguna Hartono | 2015-07-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr c# - code ausgeführt, ohne irgendwelche Ausnahmen, die es aktualisiert die Datenbank zu. Vermutlich haben Sie
AttachDbFilename=|DataDirectory|\yourDB.mdf
in IhremConnectionString
bedeutet, dass die Datenbank, die aktualisiert wird, befindet sich in den UnterordnerBIN\DEBUG
Ordner Ihres Projekts. Wenn Sie sehen möchten der aktualisierten Daten in die Datenbank anfügen, die sich in derbin/debug
Ordner in ssms.für mehr details Lesen Sie diese post.
Auch stellen Sie sicher, Ihre Tabelle im server-explorer wird nicht geöffnet, wenn es bereits geöffnet ist, müssen Sie es aktualisieren, um aktualisierte Daten anzuzeigen. Bitte beachten Sie:wie bereits erwähnt, in den Kommentaren sollten Sie immer verwenden parametrisierte Abfragen zu vermeiden
Sql-Injection
.falls Sie Ihre Datenbank als Datei in Ihr Projekt, versuchen Sie, setzen
Copy To Output Directory
- Eigenschaft der Datenbank aufCopy if newer
kann Ihnen dabei helfen. Markieren Sie bitte meine Antwort als "akzeptiert", wenn Sie hilfreich für Sie. Auch wenn Sie weitere Hilfe benötigen lass es mich wissen.meta.stackexchange.com/questions/5234/...Ja, endlich bin ich zu verwalten, um all die Dinge, die getan und Recht. Danke!!!
InformationsquelleAutor Salah Akbari