Correggere questa query SQL: errore di “motore di database Microsoft Jet non riesce a trovare la tabella di input o query 'SE'”

StackOverflow https://stackoverflow.com/questions/3584729

Domanda

Devo dire Ciao esperti: D. Aiutami con questa bella code:)

La banca dati:

"ID (chiave primaria)" |
"Titolo" 0 |
"title1" 1 |
"Title2" 2 |
"title3" 3 | "TITLE4"


Sub AddRecord(ByVal Table As String, ByVal Columns As String, ByVal Record() As String)
    Dim SubDir As String = ""

    Dim Adapter As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM " & Table, connectionString)
    Dim command As OleDbCommand
    Dim tbCorrectSyntax = ""

    Using connection As New OleDbConnection(connectionString)
        Try
            connection.Open()
            Dim Commandtxt As String = ""
            For i = 0 To Record.GetUpperBound(0)
                If Record(i).IndexOf(",") > 0 Then
                    Dim tmpRec() As String = Nothing
                    Dim cols() As String = Nothing

                    tmpRec = Record(i).Split(",")
                    cols = Columns.Split(",")

                    For j = 0 To tmpRec.GetUpperBound(0)
                        tbCorrectSyntax &= cols(j) & " = '" & tmpRec(j) & "' " & IIf(j = tmpRec.GetUpperBound(0), "", " , ")
                    Next
                End If


                Dim txtCorrect As String = IIf(tbCorrectSyntax = "", Columns & " = " & Record(i), tbCorrectSyntax)

                Commandtxt = "IF OBJECT_ID ( 'InsertOrUpdateItem', 'P' ) IS NOT NULL " & _
                                "DROP PROCEDURE InsertOrUpdateItem " & _
                             "GO " & _
                             "CREATE PROCEDURE InsertOrUpdateItem " & _
                                "AS " & _
                                "IF (EXISTS (SELECT * FROM " & Table & _
                                            " WHERE " & txtCorrect & "))" & _
                                            " begin " & _
                                                "UPDATE (" & Table & ") " & _
                                                txtCorrect & _
                                                " WHERE " & txtCorrect & " " & _
                                            " End " & _
                                            " else " & _
                                                " begin " & _
                                                " INSERT INTO " & Table & " (" & Columns & ") " & _
                                                " VALUES (" & Record(i) & ")" & _
                                            " End " & _
                                "End "

                'Commandtxt = "INSERT INTO " & Table & " (" & Columns & ") VALUES (" & Record(i) & ")"
                command = New OleDbCommand(Commandtxt, connection)
                command.CommandType = CommandType.StoredProcedure
                command.ExecuteNonQuery()

            Next


        Catch ex As Exception
            msgbox(ex.Message)
        Finally
            connection.Close()
        End Try
    End Using
End Sub

Function connectionString() As String
    Return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBdir & ";User Id=admin;Password=;"
End Function

La prima procedura è un wrapper per aggiungere dati ai campi del database (se esistono dati doent) Ma aggiornarlo con la riga già esistono nuovi dati.

Input:
 Tabella = TableName
       Colonne = nome colomns che verranno aggiornati separati da virgola (Ex1: "ID", Ex2: "ID, titolo, ...")
       Record () = matrice di stringhe che rappresentano i nuovi valori (valori multipli sono separati da una virgola)

OK, prima di aggiungere i valori alla base di dati, dovremmo verificare se esiste una riga con questo valori :)
Per fare questo, la creazione di una stored procedure è un modo migliore per trattare con il database velocemente.

Quindi ... Il problema ora è, al tempo di esecuzione, la signorina OleDB gettare questo errore:
motore di database Microsoft Jet non riesce a trovare la tabella di input o query 'SE' ....

Grazie in anticipo: D

È stato utile?

Soluzione 2

Ho trovato una soluzione per il mio problema (con un po 'di ricerca rete :)) hahahaha i m felice
in ogni caso, la domanda iniziale era: 'Come aggiornare un record nel database se esiste' Così ho provato a creare e memorizzare una stored procedure nel database ... ma ... :)

Poi ho trovato un interessante metodo: l'ExecuteScalar OleDbCommand Classe

Semplicemente restituiscono un valore in base all'input SQL: il seguente esempio che ho usato, esso restituisce la (chiave primaria) indice se esiste recod. Quindi, consente di iniziare:

Function GetRecordIndex(ByVal Table As String, ByVal Columns As String, ByVal Record As String) As String
    Dim Commandtxt As String = ""
    Dim Command As OleDbCommand
    Dim tbCorrectSyntax As String = ""
    Dim tbCorrectSyntaxAND As String = ""

    Using connection As New OleDbConnection(connectionString)

        Try
            connection.Open()
            If Record.IndexOf(",") > 0 Then
                Dim tmpRec() As String = Nothing
                Dim cols() As String = Nothing

                tmpRec = Record.Split(",")
                cols = Columns.Split(",")

                For j = 0 To tmpRec.GetUpperBound(0)
                    tbCorrectSyntax &= cols(j) & "='" & tmpRec(j) & "' " & IIf(j = tmpRec.GetUpperBound(0), "", " , ")
                    tbCorrectSyntaxAND &= cols(j) & "='" & tmpRec(j) & "' " & IIf(j = tmpRec.GetUpperBound(0), "", " AND ")
                Next
            End If
            Dim txtCorrect As String = IIf(tbCorrectSyntax = "", Columns & "=" & Record, tbCorrectSyntax)
            Dim txtCorrectAND As String = IIf(tbCorrectSyntaxAND = "", Columns & "=" & Record, tbCorrectSyntaxAND)

            Commandtxt = "SELECT * FROM " & Table & " WHERE " & txtCorrectAND
            Command = New OleDbCommand(Commandtxt, connection)
            Dim RecordIndex As String = Command.ExecuteScalar

            Return RecordIndex

        Catch ex As Exception
            Return Nothing
        Finally
            connection.Close()
        End Try
    End Using
End Function

Come prima, Colonne parametro può essere una singola colonna di database, o più colonne separati da virgole. stessa cosa con record che rappresentano i dati all'interno di ogni colonna

Grazie per il vostro aiuto
Fadelovesky

Altri suggerimenti

 command.CommandType = CommandType.StoredProcedure 

si richieda si esegue un proc memorizzato (CommandText sarebbe il nome di uno sproc esistente). Quello che in realtà si sta dando un comando SQL da eseguire direttamente. Il CommandType dovrebbe essere di testo;

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top