2017-09-18 1 views
0

einfügen Ich versuche, in eine Access-Datenbank einzufügen. Alle Felder funktionierten bis auf das Feld "passwordx", in dem der Datentyp nicht im Kriterienausdruck übereinstimmt.Datentyp stimmt nicht überein, wenn versucht wird, in eine Access-Datenbank von C#

string commandSql = "INSERT INTO Members (lastName, firstName, id, dob, phone, areaCodeNo, adress, cityNo, zipCode, email, active,passwordx) VALUES (@lastName, @firstName, @id, @dob, @phone, @areaCodeNo, @adress, @cityNo, @zipCode, @email, @active,@passwordx); "; 
OleDbCommand command = new OleDbCommand(commandSql, connection); 
command.Parameters.Add("@lastName", OleDbType.VarChar, 100).Value = mem.lastName; 
command.Parameters.Add("@firstName", OleDbType.VarChar, 100).Value = mem.firstName; 
command.Parameters.Add("@id", OleDbType.VarChar, 100).Value = mem.id; 
command.Parameters.Add("@dob", OleDbType.VarChar, 100).Value = mem.dob; 
command.Parameters.Add("@phone", OleDbType.VarChar, 100).Value = mem.phone; 
command.Parameters.Add("@areaCodeNo", OleDbType.Integer, 100).Value = mem.areaCodeNo; 
command.Parameters.Add("@adress", OleDbType.VarChar, 100).Value = mem.adress; 
command.Parameters.Add("@cityNo", OleDbType.Integer, 100).Value = mem.cityNo; 
command.Parameters.Add("@zipCode", OleDbType.VarChar, 100).Value = mem.zipCode; 
command.Parameters.Add("@email", OleDbType.VarChar, 100).Value = mem.email; 
command.Parameters.Add("@passwordx", OleDbType.VarChar, 100).Value = mem.password; 
command.Parameters.Add("@active", OleDbType.Boolean, 100).Value = mem.active; 

connection.Open(); 
affectedRows = command.ExecuteNonQuery(); 
connection.Close(); 

danke für die Hilfe.

+0

spielt es eine Rolle, dass Sie = mem.password und not = mem.passwordx haben –

+0

Schwer zu sagen, ohne das Tabellenschema zu kennen. –

+0

das Passwort-Feld ist als Kurztext –

Antwort

2

Mischt die letzten beiden Parameter die Reihenfolge Ihrer SQL entsprechen:

command.Parameters.Add("@active", OleDbType.Boolean, 100).Value = mem.active; 
command.Parameters.Add("@passwordx", OleDbType.VarChar, 100).Value = mem.password; 

Und ein Boolean keine Länge haben.

+0

Das ist ein guter Punkt. OleDB hat positionale Parameter und ignoriert die Parameternamen. Die falsche Reihenfolge bedeutet, dass die Booleschen und VarChar-Parameter verwechselt wurden, was die Nichtübereinstimmung des Datentyps erklärt. –

Verwandte Themen