Ich habe eine INSERT-Anweisung eingerichtet, um Werte an die Datenbank zurückzugeben, wenn das Textfeld leer ist, aber immer noch nicht auf der Einfügung.Zurückgeben von Nullwerten für den Zugriff auf die Datenbank über OleDb
Ich habe festgestellt 'Kein Wert für einen oder mehrere Parameter angegeben.'
wohin gehe ich falsch?
meine Felder Zugang sind nicht gesetzt
erforderlichprivate void NewCustomer_Load(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
OleDbConnection Conn = new OleDbConnection();
Conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=BoilerSvc_be.mdb";
OleDbCommand command = new OleDbCommand();
command.CommandText = "INSERT INTO Contacts (Title,Initial,Surname,[Address 1],[Address 2],[Address 3],[Post Town],[Post Code],Telephone,Archived) VALUES (@Title,@FirstName,@LastName,@Address1,@Address2,@Address3,@PostTown,@PostCode,@Telephone,Archived = 0)";
if (string.IsNullOrEmpty(FirstName.Text))
{
command.Parameters.AddWithValue("@FirstName", DBNull.Value);
}
else
{
command.Parameters.AddWithValue("@FirstName", title.Text);
}
if (string.IsNullOrEmpty(LastName.Text))
{
command.Parameters.AddWithValue("@LastName", DBNull.Value);
}
else
{
command.Parameters.AddWithValue("@LastName", title.Text);
}
if (string.IsNullOrEmpty(Address1.Text))
{
command.Parameters.AddWithValue("@Address1", DBNull.Value);
}
else
{
command.Parameters.AddWithValue("@Address1", title.Text);
}
if (string.IsNullOrEmpty(Address2.Text))
{
command.Parameters.AddWithValue("@Address2", DBNull.Value);
}
else
{
command.Parameters.AddWithValue("@Address2", title.Text);
}
if (string.IsNullOrEmpty(Address3.Text))
{
command.Parameters.AddWithValue("@Address3", DBNull.Value);
}
else
{
command.Parameters.AddWithValue("@Address3", title.Text);
}
if (string.IsNullOrEmpty(Postcode.Text))
{
command.Parameters.AddWithValue("@PostCode", DBNull.Value);
}
else
{
command.Parameters.AddWithValue("@PostCode", title.Text);
}
if (string.IsNullOrEmpty(TownCity.Text))
{
command.Parameters.AddWithValue("@PostTown", DBNull.Value);
}
else
{
command.Parameters.AddWithValue("@PostTown", title.Text);
}
if (string.IsNullOrEmpty(PhnNum.Text))
{
command.Parameters.AddWithValue("@Telephone", DBNull.Value);
}
else
{
command.Parameters.AddWithValue("@Telephone", title.Text);
}
if (string.IsNullOrEmpty(Titl.Text))
{
command.Parameters.AddWithValue("@Title", DBNull.Value);
}
else
{
command.Parameters.AddWithValue("@Title", title.Text);
}
Conn.Open();
command.Connection = Conn;
command.ExecuteNonQuery();
Conn.Close();
FirstName.Text = null;
LastName.Text = null;
Address1.Text = null;
Address2.Text = null;
Address2.Text = null;
Postcode.Text = null;
TownCity.Text = null;
Titl.Text = null;
PhnNum.Text = null;
Address3.Text = null;
MessageBox.Show("Customer Added");
}
Ich denke, sollten Sie die „archivierten = 0“ am Ende entfernen. Und setzen Sie einfach 0. – Danieboy
Abgesehen von allem anderen, ich denke nicht, OleDbCommand unterstützt benannte Parameter überhaupt: "Der OLE DB .NET Provider unterstützt keine benannten Parameter für die Übergabe von Parametern an eine SQL-Anweisung oder eine gespeicherte Prozedur von ein OleDbCommand, wenn CommandType auf Text festgelegt ist. In diesem Fall muss der Platzhalter Fragezeichen (?) verwendet werden. " –
1. Sie haben 'title.Text' überall auf Ihrem' AddWithValue', wo Sie den spezifischen Text für dieses Element hinzufügen möchten. 2. 'Archived = 0 'funktioniert nicht, weil Sie den Wert von' Archived' zum Zeitpunkt des Einfügens nicht kennen, Sie müssen einen Wert angeben (dies ist der Hauptschuldige). 3. Umwickeln Sie Ihr Connection-Objekt in einer 'using'-Anweisung, so dass es immer geschlossen ist. 4. Gute Arbeit an Parametern, aber bitte vergessen Sie nicht, den Parametertyp anzugeben, Sie können dies auf 'AddWithValue' verketten. Schließlich sind die Parameter positionsbasiert für OleDb, daher sollte die Reihenfolge der Parameter in der Abfrage genau mit den Parametern in der Sammlung übereinstimmen. – Igor