sirius91
Goto Top

C-Sharp INSERT in mdb schlaegt fehl

Hallo liebe Community,

ich erstelle mit C# eine aspx Webseite die Daten in eine MS Access (.mdb) Datenbank schreiben kann (insert + update). SELECT und DELETE Befehl funktionieren bereits wunderbar. Allerdings gibt es Probleme beim schreiben. Meine Vermutung liegt an der Inkonsistenz der Datentypen. Ich nutze den Oledb.Jet.4.0 Treiber. Zur Info im Vorraus: die Parameter des Command-Befehls möchte ich nur ungern nutzen, da ich eine eigene Datenbankklasse geschrieben habe und diese bereits in mehreren Dateien nutze.

Aber nun zum Code.

Hier meine Methode der DB-Klasse (Hinweis: delete funktioniert einwandfrei):
[code]
public void db_insert_update_delete(String SQL_Command) {

try
{
start connection and send command
conn.Open();
cmd.CommandType = CommandType.Text;
cmd.CommandText = SQL_Command;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
error handling -> show error on webpage
lbl_error.Text = "Error: "+ e.ToString();
}
finally {
conn.Close();
}
}
[/code]

Hier der INSERT Befehl:

[code]
[...]
sql = "INSERT INTO tbl_vacancy VALUES ('','" + txt_m_1.Text + "',"
+ Convert.ToInt32(txt_m_2_1.Text) + ","
+ Convert.ToInt32(txt_m_2_2.Text) + ",'"
+ txt_m_3.Text + "','"
+ txt_m_4.Text + "','"
+ txt_m_5.Text + "','"
+ txt_m_6.Text + "','"
+ Convert.ToDateTime(txt_m_7.Text, CultureInfo.InvariantCulture).Date + "','"
+ txt_m_8.Text + "','"
+ txt_m_9.Text + "','"
+ txt_m_10.Text + "','"
+ txt_m_11.Text + "','"
+ txt_m_12.Text + "','"
+ txt_m_13.Text + "','"
+ txt_m_14.Text + "','"
+ txt_m_15.Text + "','"
+ txt_m_16.Text + "','"
+ txt_m_17.Text + "','"
+ txt_m_18.Text + "','"
+ Convert.ToDateTime(txt_m_19.Text, CultureInfo.InvariantCulture).Date + "','"
+ Convert.ToDateTime(txt_m_20.Text, CultureInfo.InvariantCulture).Date + "');";

cDatabase db = new cDatabase(lbl_error);
db.db_insert_update_delete(sql);
[...]
[/code]

Fehler:
[code]
{System.Data.OleDb.OleDbException (0x80040E07): Datentypen in Kriterienausdruck unverträglich.
bei System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
bei System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
bei System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
bei System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
bei System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
bei System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
bei Assignment2Task3.cDatabase.db_insert_update_delete(String SQL_Command) in d:\DATEN\Dateien\Visual Studio 2012\Projects\Assignment2Task3\website\App_Code\cDatabase.cs:Zeile 62.}
[/code]

Hier noch ein Screenshot der Entwurfsansicht der Datenbank:
81b66dc6671c19e7c2d0695a7ce78694

Wie schon gesagt, meine Vermutung liegt an meinen Datentypen die ich in den INSERT-Befehl übergebe.

Ich hoffe mir kann jemand weiterhelfen!

Vielen Dank schon im Vorraus!

Content-Key: 225731

Url: https://administrator.de/contentid/225731

Ausgedruckt am: 28.03.2024 um 23:03 Uhr

Mitglied: colinardo
Lösung colinardo 03.01.2014 aktualisiert um 10:23:52 Uhr
Goto Top
Hallo Sirius91,
das Problem ist das AutoWert-Feld in deiner Datenbank, damit gibt es immer wieder mal Probleme beim Zugriff aus anderen Programmen. Du arbeitest hier besser mit folgender SQL-Variante indem du die einzufügenden Felder angibst und dabei das AutoWert-Feld auslässt:
sql = "INSERT INTO tbl_vacancy(Title,SalarayStart, und so weiter)  VALUES ('" + txt_m_1.Text + "'," + und so weiter)"
Grüße Uwe
Mitglied: wiesi200
wiesi200 03.01.2014 um 09:28:40 Uhr
Goto Top
Hallo,

zusätzlich. Datum als Textfeld zu speichern ist auch "gewöhnungsbedürftig".
Mitglied: Sirius91
Sirius91 03.01.2014 um 10:24:50 Uhr
Goto Top
Zitat von @wiesi200:

Hallo,

zusätzlich. Datum als Textfeld zu speichern ist auch "gewöhnungsbedürftig".

Oh, entschuldigung. Ist natürlich im Datum/Zeit Format.. hab ich wohl vergessen wieder zurückzusetzen beim Testen ;)

Auf jeden Fall war der Lösungsansatz von colinardo der richtige!

Herzlichen Dank!