Invalid object name 'dbo.mytable'

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von xChRoNiKx.

    Invalid object name 'dbo.mytable'

    Hallo,

    ich hab ein Programm indem mit Create table eine Tabelle erstellt wird.
    Immer wenn die Tabelle nicht existiert bekomme ich dann diese Fehlermeldung

    Unbehandelte Ausnahme in der Anwendung ......
    Invalid object name 'dbo.mytable'


    Quellcode

    1. Dim sql_command As String = "IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'mytable' AND type = 'U')
    2. BEGIN
    3. CREATE TABLE [mytable](......


    die Tabelle wird aber trotz dieser Fehlermeldung erstellt
    Weiss jemand wo da ein Fehler ist ?

    Quellcode

    1. Public Sub Create_Table_mytable() ' Tabelle anlegen, falls sie noch nicht vorhanden ist
    2. Dim sql_comm As String = "IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'mytable AND type = 'U')
    3. BEGIN
    4. CREATE TABLE [mytable](
    5. [Id] INT IDENTITY (1, 1) NOT NULL,
    6. [Depotname] VARCHAR (50) NOT NULL,
    7. [Datum] DATE NULL,
    8. [Startkapital] FLOAT (53) NULL,
    9. [Depot] FLOAT (53) NULL,
    10. [Geld] FLOAT (53) NULL,
    11. [Gesamt] FLOAT (53) NULL,
    12. [Kapitalentwicklung absolut] FLOAT (53) NULL,
    13. [Kapitalentwicklung prozentual] FLOAT (53) NULL,
    14. [Konto] NCHAR (10) NULL,
    15. [Waehrung] NCHAR (10) NULL,
    16. PRIMARY KEY CLUSTERED ([Id] ASC)
    17. );
    18. END"
    19. Dim cmd As SqlCommand = New SqlCommand(sql_comm, SQL_Verbindung)
    20. cmd.Connection.Open()
    21. Dim String_variable As String = CType(cmd.ExecuteScalar(), String)
    22. cmd.Connection.Close()
    23. End Sub
    Hast du Zugriff auf die sys.tables?
    Um welche Serverversion handelt es sich genau?
    Was passiert wenn du den Code direkt im, ich denke Mal MS SQL Server also, Management Studio unter den gleichen Rechten wie dein VB.net Programm ausführst?
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Ich hab vollen Zugriff, ich kann schreiben, lesen, löschen
    alles kein Problem, später wenn die Tabellen existieren gibts auch keine Fehlermeldung mehr

    Ich hab den Fehler mal bei Google eingegeben und hab dann gelesen, dass es die System-Database (dbo) ist und man eine eigene Database erstellen soll
    dbo ist ein Datenbank Schema, so wie sys auch.

    Leider weiß ich noch nicht welches DB-System du nutzt und auch nicht ob das gleiche Query direkt im DB Management Tool zum gleichen Ergebnis kommt
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Das ist ne SQL Datenbank, ich hab dieselbe Abfrage jetzt mal direkt eingegeben, da erscheint die Fehlermeldung nicht.
    Noch was ist mir aufgefallen, ich habe 3 verschiedene Tabellen in derselben Datenbank, aber die Fehlermeldung erscheint nur bei der einen Tabelle, bei den anderen nicht,

    Ich hab die Felder der Tabelle schon ein paar mal geändert und den Namen aber beibehalten.
    An welcher stelle/Zeile genau im code kommt es zum Fehler? Wie lautet die gesamte Fehlermeldung?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Quellcode

    1. ​Unbehandelte Ausnahme in der Anwendung


    Quellcode

    1. Informationen über das Aufrufen von JIT-Debuggen
    2. anstelle dieses Dialogfelds finden Sie am Ende dieser Meldung.
    3. ************** Ausnahmetext **************
    4. System.Data.SqlClient.SqlException (0x80131904): Invalid object name 'mytable'.
    5. bei System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
    6. bei System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
    7. bei System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
    8. bei System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
    9. bei System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
    10. bei System.Data.SqlClient.SqlDataReader.get_MetaData()
    11. bei System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
    12. bei System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
    13. bei System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
    14. bei System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
    15. bei System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
    16. bei System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
    17. bei System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
    18. bei System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
    19. bei System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
    20. bei System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
    21. bei myprogram_1.DB_my1DataSetTableAdapters.mytableTableAdapter.Fill(mytableDataTable dataTable) in D:\source\repos\myprogram 1\myprogram 1\DB_my1DataSet.Designer.vb:Zeile 12809.
    22. bei myprogram_1.Form1.Tabelle1_laden() in D:source\repos\myprogram 1\myprogram 1\Form1.vb:Zeile 86.
    23. bei myprogram_1.Form1.Form1_Load(Object sender, EventArgs e) in D:\source\repos\myprogram 1\myprogram 1\Form1.vb:Zeile 49.
    24. bei System.EventHandler.Invoke(Object sender, EventArgs e)
    25. bei System.Windows.Forms.Form.OnLoad(EventArgs e)
    26. bei System.Windows.Forms.Form.OnCreateControl()
    27. bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
    28. bei System.Windows.Forms.Control.CreateControl()
    29. bei System.Windows.Forms.Control.WmShowWindow(Message& m)
    30. bei System.Windows.Forms.Control.WndProc(Message& m)
    31. bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
    32. bei System.Windows.Forms.Form.WmShowWindow(Message& m)
    33. bei System.Windows.Forms.Form.WndProc(Message& m)
    34. bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    35. bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    36. bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    37. ClientConnectionId:c67e983c-1116-449c-86e9-a87ef3704fdd
    38. Fehlernummer (Error Number):208,Status (State):1,Klasse (Class):16


    das ist der obere Teil der Fehlermeldung
    die Zeile 12809 siehst du hier

    Brainfuck-Quellcode

    1. <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
    2. Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "15.0.0.0"), _
    3. Global.System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter"), _
    4. Global.System.ComponentModel.DataObjectMethodAttribute(Global.System.ComponentModel.DataObjectMethodType.Fill, true)> _
    5. Public Overloads Overridable Function Fill(ByVal dataTable As DB_my1DataSet.mytableDataTable) As Integer
    6. Me.Adapter.SelectCommand = Me.CommandCollection(0)
    7. If (Me.ClearBeforeFill = true) Then
    8. dataTable.Clear
    9. End If
    10. Dim returnValue As Integer = Me.Adapter.Fill(dataTable) ' <<<------- 12809
    11. Return returnValue
    12. End Function

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tomm88“ ()

    Also die Fehlermeldung liegt nicht an deinem obigen SQL Code sondern an .Fill der datatable.
    Ich tippe mal da wird gefüllt noch bevor du prüfst ob es die Tabelle überhaupt gibt.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    Ich hab noch vergessen zu erwähnen, die Tabelle wird im Form Load Event mit Create erzeugt und dann in ein Datagridview geladen, allerdings erst danach

    Hier der Code

    Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. unteres_Fenster.MdiParent = Me
    3. oberes_Fenster.MdiParent = Me
    4. Create_Table_mytable()
    5. Create_Table_mytable2()
    6. Create_Table_mytable3()
    7. Verbinden()
    8. mytable_laden()
    9. SQL_Verbindung.Close()
    10. End Sub


    Vollzitat entfernt. ~Thunderbolt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    Dann verlagere deinen Code doch mal vom Form.Load auf einen Button in der Form.

    Dann sollte der Fehler ja nicht mehr auftreten, oder aber (und das denke ich) das Dataset wird durch den (ich glaube) TableAddapter schon vor deinem Code geladen.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    erst beim Button.Click

    das Create im Form Load Event läuft einwandfrei durch

    Liegt wohl am Adapter und am Fill

    Ich werde den Code an dieser Stelle nochmal überarbeiten

    Vollzitat entfernt. ~Thunderbolt

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Thunderbolt“ ()

    Der Fehler besteht immer noch, hier der Code, wo das Datagridview gefüllt wird.
    Funktioniert auch, aber wie schon gesagt nur wenn die Tabelle schon existiert.
    Das Form Load Event habe ich weiter oben gepostet

    Quellcode

    1. Private Sub mytable_laden()
    2. Dim table As New DataTable("mytable")
    3. Dim LoadSQL As String = "SELECT * FROM mytable"
    4. Dim LoadSQLAdapter As New SqlDataAdapter(LoadSQL, SQL_Verbindung)
    5. Datagridview1.DataSource = table
    6. LoadSQLAdapter.Fill( table )
    7. End Sub




    Hab den Fehler gefunden, funktioniert jetzt.
    Ich hatte eine MDI Parent Form und ein MDI Child Form, in beiden stand die Anweisung Fill mit dem Adapter, nachdem ich es aus der Child Form gelöscht habe, funktioniert es jetzt einwandfrei
    War mein Fehler

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Tomm88“ ()

    @Tomm88 da dies hier ein Forum ist und Leute deinen Thread z.b. per Suche finden wäre es super
    wenn du deine Lösung mit uns teilst. So kann evtl. jemand der das gleiche Problem hat hier auch eine Lösung finden.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen