2016-04-20 10 views
0

Ich bin neu in SQL. Ich bin mir nicht sicher, ob das möglich ist, aber ich habe zwei Tabellen namens P_Movies & P_TV_Shows. P_Movies hat eine Spalte namens MOVIEID & P_TV_SHOWS hat eine Spalte namens TVID.Wie Daten angezeigt werden, wenn Benutzereingaben ID # in Oracle.DataAccess.Client, VB Formularanwendung

Ich versuche, eine Aussage herauszufinden, wo, wenn der Benutzer movieID eingibt, wird es das bestimmte movietitle und Direktor auswählen. Das gleiche gilt für TVID, es wird diesen TV-Titel und TVDirector anzeigen. Hier

ist der Code, den ich habe:

  'Reference Orcale' 
     Imports Oracle.DataAccess.Client 

      Public Class frmSearch 

     'Get a Connection , string into a variable' 

     Dim oradb As String = "Data Source=(DESCRIPTION=" _ 
     + "(ADDRESS=(PROTOCOL=TCP)(HOST=------)(PORT=---))" _ 
     + "(CONNECT_DATA=(SERVICE_NAME=orclcitp)));" _ 
     + "User Id=----;Password=---;" 

     'Create an Oracle connection 
     Dim conn As New Odbc.OdbcConnection(oradb) 



     Private Sub BtnMainMenu_Click(sender As Object, e As EventArgs) 
     Handles BtnMainMenu.Click 

    'Show Main Menu Form' 
     frmMainMenu.Show() 

     'Hide Search Form' 
     Me.Hide() 

     End Sub 

     Private Sub BtnClear_Click(sender As Object, e As EventArgs) Handles 
     BtnClear.Click 

     'Set Focus and selects MovieID textbox' 

     txtMovieID.Focus() 
     txtMovieID.Select() 


     'Clear textbox and label' 

     txtMovieID.Clear() 
     txtTVID.Clear() 

     lblTitleDisplay.Text = "" 
     lblDirectorDisplay.Text = "" 

    End Sub 

    Private Sub BtnSearch_Click(sender As Object, e As EventArgs) Handles 
     BtnSearch.Click 

    'Create Variables for the data that will be retrieved from the database' 

    Dim strTitle As String = "" 
    Dim strDirector As String = "" 


    conn.Open() ' Open Orcale Connection' 

    'Select All Varaibles From database string' 


     Dim sql1 As String = "SELECT MOVIETITLE, MOVIEDIRECTOR FROM P_MOVIES 
    WHERE MOVIEID = '" & txtMovieID.Text & " ' SELECT TVTITLE,TVDIRECTOR 
    FROM P_TV_SHOWS WHERE TVID= '" & txtTVID.Text & "'" 

     'Create orcale command' 
     Dim cmd1 As New OracleCommand(sql1, conn) 

     'Eqaual command to the user selection' 
     cmd1.CommandText = sql1 
     cmd1.CommandType = CommandType.Text 

    'Create Oracle data reader which be stored in the variables created' 
    Dim dr As Odbc.OdbcDataReader = cmd1.ExecuteReader() 


    While dr.Read() 
     If Not dr.GetValue(0) Is DBNull.Value Then _ 
      strTitle = dr.GetString(0) 
     strDirector = dr.GetString(1) 
    End While 

    'Assign Variables to the data labels which will display them' 
    lblTitle.Text = strTitle 
    lblDirector.Text = strDirector 

    'Close Orcale Connection' 
    conn.Close() 



    'Set Focus to movieid textbox' 
    txtMovieID.Focus() 



    End Sub 
    End Class 
+1

Ihre SQL-Syntax ist nicht korrekt. Verwenden Sie ein 'UNION ALL', um beide Ergebnisse zu erhalten:' Wählen Sie ... Von P_MOVIES Wo ... Union Alle Wählen ... Von P_TV_SHOWS Wo ... '. Verwenden Sie zusätzlich Parameter, anstatt die MovieID, TvId aufgrund von SQL-Injection-Problemen zu verketten. –

Antwort

0

Sie auf SQL-Injection lesen sollte, die speziell für vb.net. Sie sollten Parameter hinzufügen. Der Variablen in der where-Klausel muss ein Oracle-Client für Oracle-Datenzugriff vorangestellt werden.

Dim sql1 as string = "Select column1, column2 from table1 where somevalue = :userinput" 

cmd.Parameters.Add("userinput", textboxName.Text) 

Securing at .NET application on Oracle

Warnung: Ich weiß nicht viel vb.net, so verzeihen Sie mir, aber ich Orakel Zugang mit C# verwenden ... Die Ideen gleich sein sollte.