2014-01-13 19 views
0

我在一個VB.NET項目上工作,並且在如何連接表之間遇到問題。從vb.net的兩個不同頁面訪問數據庫中的兩個表之間的連接

我訪問數據庫[數據庫1]

表:T1,RequestDetails

T1:    U_ID Name Address  Phone 

RequestDetails: U_ID RqNo Requestport country_of_request RqMethod 

在第一頁中,用戶需要輸入自己的信息Name Address Phone。點擊按鈕時,該數據將被插入數據庫並導航到第二頁。

在第二頁中,用戶應完成基礎上,U_ID

進入他的數據我有3個dropdownlists:Requestportcountry_of_requestRqMethod

和D也是一個按鈕被按下時,它應該插入數據然後去。

一切都好;我分別在每個頁面上工作。現在我想連接U_ID,T1RequestDetails以使數據從第1頁和第2頁連接起來。

我不知道如何解釋問題我希望每件事情都清楚。

我第1頁代碼:

我建立連接類做有關的工作人員

Imports System.Data 
Imports System.Data.OleDb 
Imports System 

Public Class connection 

    Dim str As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\hp\Documents\Visual Studio 2010\Projects\WebApplication1\WebApplication1\bin\Database1.accdb" 
    Dim con As New OleDbConnection(str) 
    Public Sub Insert(ByVal Name As String, ByVal Address As String, ByVal Phone As String) 
     If con.State = ConnectionState.Closed Then 
      con.Open() 
     End If 
     Dim adp As New OleDbCommand("insert into T1 values(" & GetMaxID() & ",'" & Name & "','" & Address & "','" & Phone & "') ", con) 

     adp.ExecuteNonQuery() 
     con.Close() 

    End Sub 

    Public Function GetMaxID() As Integer 

     Dim x As Integer = 1 
     If con.State = ConnectionState.Closed Then 
      con.Open() 
     End If 
     Dim adp As New OleDbCommand("select max(ID) from T1", con) 
     Try 
      x = adp.ExecuteScalar 
      Return x + 1 
     Catch ex As Exception 
      Return x 
     End Try 
    End Function 
End Class 

然後在按鈕:

Public Class _Default 
    Inherits System.Web.UI.Page 

    Dim x As New connection 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    End Sub 

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 
     x.Insert(TextBox1.Text, TextBox2.Text, TextBox3.Text) 
     Response.Redirect("~/ReqDetails.aspx") 
    End Sub 
End Class 

這裏是沒有問題的。

在該按鈕的第二頁:

Imports System.Data 
Imports System.Data.OleDb 
Imports System 

Public Class shipmentDetails 
    Inherits System.Web.UI.Page 


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    End Sub 

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 

     Dim str As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\hp\Documents\Visual Studio 2010\Projects\WebApplication1\WebApplication1\bin\Database1.accdb" 
     Dim con As New OleDbConnection(str) 

     con.Open() 



     Dim Command As New OleDbCommand("INSERT INTO RequestDetails(Requestport," & "country_of_request," & "RqMethod,")VALUES(@Requestport,@country_of_request,@RqMethod)", con)" 
     Command.Parameters.Add(New OleDbParameter("@Requestport", Requestport.SelectedItem.Text)) 
     Command.Parameters.Add(New OleDbParameter("@country_of_request", country_of_request.SelectedItem.Text)) 
     Command.Parameters.Add(New OleDbParameter("@RqMethod", RqMethod.SelectedItem.Text)) 
    ) 


     Command.ExecuteNonQuery() 
     con.Close()  

     Label1.Text = "Thank You. Your transaction was successful." 
     Label1.Visible = True 

    End Sub 
End Class 

這裏的問題是:

如果我填的數據,然後單擊下一步就說明我的錯誤,因爲U_Id不填,它應該不爲空

這意味着它應該從第1頁讀取u_id ...我該怎麼做?

+0

第1頁,設定你的'U_Id'在一個Session變量。第2頁會讀取會話變量。如果沒有設置,請相應處理。 – jp2code

回答

0

這看起來像一個ASP項目中的VB.NET代碼。如果是這樣的話,我會問你至少把它放在標籤中,但你也可以使用POST將U_ID發送到第二頁。

如果這是一個純粹的VB.NET應用程序打開第二個窗口,您應該能夠使第二個窗口成爲父項的子項,創建一個名爲U_ID的全局公共變量,並且能夠調用parent.U_ID(Parent should最好是你的原始形式的名稱。)。我認爲理想情況下,您也可以在ASP中使用父呼叫,但我從未嘗試過。

我實際上會要求澄清,但我似乎還沒有做到。如果您確實需要確認兩者中的哪一個,那麼我可以根據需要使用一些示例代碼進行編輯。

編輯:

這裏的東西比HTTP發佈方法要容易得多。作爲參考,請閱讀The msdn article

在主窗體中創建以下內容。

Public ReadOnly Property U_ID() As Integer 
    Get 
     Return ID 
    End Get 
End Property 

然後添加你喜歡這一功能(這是關於我自己看着辦這個工作的最簡單的方法:

Public ID as Integer 

Public Function GetMaxID() As Integer 

     Dim x As Integer = 1 
     If con.State = ConnectionState.Closed Then 
      con.Open() 
     End If 
     Dim adp As New OleDbCommand("select max(ID) from T1", con) 
     Try 
      x = adp.ExecuteScalar 
      ID=x+1 
      Return x + 1 
     Catch ex As Exception 
      Return x 
     End Try 
    End Function 

現在你有一個公共變量您的第二個頁面可以這樣寫:

<%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %> 

Public U_ID as Integer = PreviousPage.U_ID 

嘗試。您應該能夠訪問的前一頁的U_ID。

+0

感謝您的重播..並很抱歉的解釋不好,因爲英語不是我的母語..它的ASP項目請幫助我,如果你可以 – user3190412

+0

毫米我認爲解決方案是編寫SQL語句,加入2表..和我不知道在vb.net上寫它是誰。 – user3190412

+0

您的U_ID應該是您需要加入這兩個表的外鍵。所以,在完成任何SQL連接之前,您可能需要它。無論哪種情況,上面的例子都應該可以工作,而且我希望是相對容易的。 –

相關問題