Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Fehler bei Update mit DataView
UHM
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

Fehler bei Update mit DataView

beantworten | zitieren | melden

Hallo,

ich versuche meine erste Anwendung mit ADO, weiß derzeit aber nicht weiter. Ich greife mit VS C# Express auf eine Access 2003 Database mit mehreren Tabellen zu, die ich über Dialogboxen editieren möchte. Dazu habe ich für einen Datensatz nun folgende Funktion erstellt:

        private void FlatEdit(int p)
        {
            using (Flat dlgFlat = new Flat())
            {
                String strSQL = "SELECT * FROM Wohnung";

                OleDbDataAdapter adapter = new OleDbDataAdapter();
                adapter.SelectCommand = new OleDbCommand(strSQL, con);
                OleDbCommandBuilder cb = new OleDbCommandBuilder(adapter); 
                DataSet dsFlats = new DataSet();
                adapter.Fill(dsFlats, "Wohnung");
                DataTable dtFlats = (DataTable)dsFlats.Tables[0];
                DataView dvFlats = new DataView(dtFlats);

                dvFlats.RowFilter = "ObjektID = " + ObjectGetIndex().ToString();
                dlgFlat.Text = "Wohnung " + dvFlats[p][0].ToString();
                dlgFlat.FlatSize = Convert.ToDecimal(dvFlats[p]["Qm"]);
                dlgFlat.Kennung = dvFlats[p]["Kennung"].ToString();
                if (dlgFlat.ShowDialog() == DialogResult.OK)
                {
                    dvFlats[p].BeginEdit();
                    dvFlats[p]["Qm"] = dlgFlat.FlatSize;
                    dvFlats[p]["Kennung"] = dlgFlat.Kennung;
                    dvFlats[p].EndEdit();
                    
                    adapter.Update(dsFlats, "Wohnung");
                 }
            }
        }


Beim Update erhalte ich nun immer die OleDbException "Datentypen in Kriterienausdruck unverträglich."
Weiß da einer hier was da falsch ist und wie man das richtig macht?

Danke im Voraus
Udo
private Nachricht | Beiträge des Benutzers
Florian Reischl
myCSharp.de - Experte

Avatar #avatar-2880.jpg


Dabei seit:
Beiträge: 1.564
Herkunft: München

beantworten | zitieren | melden

Hallo UHM

Willkommen bei myCSharp.de!

welche Datentypen haben denn die Spalten "Qm" und "Kennung" in der Datenbank? Deinem Code nach zu urteilen Decimal und Text, oder?

Versuche mal je nur eines der Felder zu ändern und dann das Update durchzuführen, so findest du raus ob es mit einer speziellen Spalte Probleme gibt.

Wenn das nicht hilft vielleicht mal den Stacktrace.

Grüße
Flo
Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.
private Nachricht | Beiträge des Benutzers
UHM
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

Hallo Florian,

Mit den Datentypen liegst Du richtig: Decimal 5/2 bzw. Text(20).
Das mit den einzelnen Feldern habe ich schon probiert, es tritt bei beiden auf. Nur wenn ich keines der beiden Felder ändere, dann tritt kein Fehler auf 8)

Ausnahmedetails:
System.Data.OleDb.OleDbException wurde nicht behandelt.
Message="Datentypen in Kriterienausdruck unverträglich."
Source="Microsoft JET Database Engine"
ErrorCode=-2147217913
StackTrace:
bei System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
bei System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
bei System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
bei System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
bei System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)
bei UHM_Hausverwaltung.UHMHausverwaltung.FlatEdit(Int32 p) in C:\Users\massl\Documents\Visual Studio 2008\Projects\UHM Hausverwaltung\UHM Hausverwaltung\Hausverwaltung.cs:Zeile 573.
bei UHM_Hausverwaltung.UHMHausverwaltung.tbFlat_DoubleClick(Object sender, EventArgs e) in C:\Users\massl\Documents\Visual Studio 2008\Projects\UHM Hausverwaltung\UHM Hausverwaltung\Hausverwaltung.cs:Zeile 542.
bei System.Windows.Forms.Control.OnDoubleClick(EventArgs e)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.Label.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(Form mainForm)
bei UHM_Hausverwaltung.Program.Main() in C:\Users\massl\Documents\Visual Studio 2008\Projects\UHM Hausverwaltung\UHM Hausverwaltung\Program.cs:Zeile 18.
bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()
InnerException:

Mir hilft der Stacktrace aber auch nicht weiter.

Grüße auch
Udo
private Nachricht | Beiträge des Benutzers
juetho
myCSharp.de - Member



Dabei seit:
Beiträge: 3.331
Herkunft: Berlin

beantworten | zitieren | melden

Access und decimal führen zu Problemen, siehe die allerletzte Bemerkung unter
[Artikelserie] Parameter von SQL Befehlen


Gruß Jürgen
private Nachricht | Beiträge des Benutzers
UHM
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

Super, das war's anscheinend. Danke!

Udo
private Nachricht | Beiträge des Benutzers