Die SqlParameterCollection akzeptiert nur nicht-null-SqlParameter-Art-Objekte, nicht DBNull Objekte
Immer, wenn ich nichts eingeben oder null-Wert in die Textfelder ein Fehler kommt. Mein code ist wie folgt:
SqlCommand cmd = con.CreateCommand();
cmd.CommandText = "INSERT INTO Records
([Student ID], [First Name], [Last Name], [Middle Initial],
Gender, Address, Status, Year, Email, Course,
[Contact Number])
VALUES (@StudentID, @FirstName, @LastName , @MiddleInitial,
@Gender, @Address, @Status, @Year, @Email, @Course,
@ContactNumber)";
SqlParameter p1 = new SqlParameter("@StudentID", SqlDbType.NChar);
p1.Value = textBox1.Text;
cmd.Parameters.Add(p1);
SqlParameter p2 = new SqlParameter("@FirstName", SqlDbType.NVarChar);
p2.Value = textBox2.Text;
cmd.Parameters.Add(p2);
SqlParameter p3 = new SqlParameter("@LastName", SqlDbType.NVarChar);
p3.Value = textBox3.Text;
cmd.Parameters.Add(p3);
SqlParameter p4 = new SqlParameter("@MiddleInitial", SqlDbType.NChar);
p4.Value = comboBox1.Text;
cmd.Parameters.Add(p4);
SqlParameter p5 = new SqlParameter("@Gender", SqlDbType.NChar);
p5.Value = comboBox2.Text;
cmd.Parameters.Add(p5);
SqlParameter p6 = new SqlParameter("@Address", SqlDbType.VarChar);
p6.Value = textBox4.Text;
cmd.Parameters.Add(p6);
SqlParameter p7 = new SqlParameter("@Status", SqlDbType.NChar);
p7.Value = comboBox3.Text;
cmd.Parameters.Add(p7);
SqlParameter p8 = new SqlParameter("@Year", SqlDbType.VarChar);
p8.Value = comboBox4.Text;
cmd.Parameters.Add(p8);
SqlParameter p9 = new SqlParameter("@Email", SqlDbType.VarChar);
p9.Value = textBox5.Text;
cmd.Parameters.Add(p9);
SqlParameter p10 = new SqlParameter("@Course", SqlDbType.VarChar);
p10.Value = comboBox5.Text;
cmd.Parameters.Add(p10);
SqlParameter p11 = new SqlParameter("@ContactNumber", SqlDbType.VarChar);
p11.Value = textBox6.Text;
cmd.Parameters.Add(p11);
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
comboBox1.Text = "";
comboBox2.Text = "";
comboBox3.Text = "";
comboBox4.Text = "";
comboBox5.Text = "";
if (cmd.Parameters.Contains(System.DBNull.Value))
{
MessageBox.Show("Please complete the fields", "Information...",
MessageBoxButtons.OK, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button1);
}
else
{
MessageBox.Show("Data Inserted!", "Information ... ",
MessageBoxButtons.OK, MessageBoxIcon.Information,
MessageBoxDefaultButton.Button1);
}
cmd.ExecuteNonQuery();
con.Close();
Ist der Fehler auf:
if(cmd.Parameters.Contains(System.DBNull.Value))
Ich bin mit SQL-Server und C#.
- Sie brauchen, um zu überprüfen, ob der Wert, den Sie setzen ist
null
vor, ordnen Sie alles, um den Befehl Parameter. Wenn Ihr ein Textfeld, dann möchten Sie vielleicht zu prüfenif(!string.IsNullOrEmpty(textbox.text)) //Then add the parameter
- Ich Tat, was Sie gesagt haben, aber es hält beim einlegen einer Daten-auch wenn es null ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum gehst du nicht wieder von vorne anfangen und tun einige richtige Validierung, bevor man zu diesem Punkt? Sie sollten nie beginnen, Objekte zu erstellen und Zeug, wenn es gibt keine Notwendigkeit, dies zu tun. Also, machen Sie sich selbst einen gefallen und fügen Sie eine Validierung der Methode wie in
dann rufen Sie einfach vor den code zu konstruieren, das sqlcommand-Objekt und parameter-Auflistung
Denken Sie daran, dies ist nicht getestet, habe ich nicht die VS jetzt und alles ist von Hand geschrieben, so vielleicht Steuern Sammlung wird nicht zugegriffen, auf diese Weise.
Zunächst müssen Sie schauen, ob die Wert Eigenschaft der Parameter ist DBNull. Sie versuchen, überprüfen Sie, ob parameter-Objekt selbst ist DBNull, aber Sie sollten einen Blick auf die Value-Eigenschaft. Sie können tun, wie diese:
Zweitens, die
.Text
Eigenschaft der textbox-Steuerelemente wird nie null sein. Im schlimmsten Fall, wird der leere string. Also, was Sie wirklich wollen, ist ein code wie dieser:Schließlich, wie nebenbei, auch wenn die
.Text
Eigenschaft könntenull
, das ist nicht das gleiche wieDBNull
. Sie sind zwei verschiedene Dinge.Sauber und wirkungsvoll. Wird Ihnen helfen, in späteren Entwicklungen. Ändern Sie Ihren code so etwas wie dieses:
Erstellen Sie eine Klasse namens " student und in dieser Klasse erstellen, die Eigenschaften für
FirstName
,LastName
und andere, wie erforderlich. So etwas wie dieses:Erstellen Sie eine separate Methode für die Zuweisung von Parameter zu
SqlCommand
. Hier in diesen Methoden können Sie auch Validierungen, wenn Sie erforderlich ternäre Operationen ich.e ?,:Erstellen Sie eine Methode zum Speichern und weitergeben der oben genannten Klasse als parameter. Sie können auch eine separate partial-Klasse im Namen der
Student
so den Zugriff auf die Mitglieder, die dieselbe Instanz. Rufen Sie die Methode in Schritt 2, um die Parameter.Student
undSqlCommand
als ref-Parameter inCreateParameterList
?