0

以下のコードを参照してください。

Imports System.Data.SqlClient
Imports System.Configuration

    Public Class Form1
        Private _ConString As String
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim objDR As SqlDataReader
            Dim objCommand As SqlCommand
            Dim objCon As SqlConnection
            Dim id As Integer
            Try
                _ConString = ConfigurationManager.ConnectionStrings("TestConnection").ToString
                objCon = New SqlConnection(_ConString)
                objCommand = New SqlCommand("SELECT Person.URN, Car.URN FROM Person INNER JOIN Car ON Person.URN = Car.URN AND PersonID=1")
                objCommand.Connection = objCon
                objCon.Open()
                objDR = objCommand.ExecuteReader(ConnectionState.Closed)
                Do While objDR.Read
                    id = objDR("URN") 'line 19
                Loop
                objDR.Close()
            Catch ex As Exception
                Throw
            Finally

            End Try

        End Sub


End Class

19 行目を参照してください。次のようなことは可能ですか。

objDR("Person.URN")

objDR("URN") を実行すると、Person URN ではなく CarURN が返されます。解決策の 1 つは、SQL AS キーワードを使用することです。

SELECT Person.URN As PersonURN, Car.URN AS CarURN FROM Person INNER JOIN Car ON Person.URN = Car.URN AND PersonID=1

その後:objDR("PersonURN")

ただし、アプリの設計方法、つまり多くのハードコーディングが必要になるため、可能であればこれを避けたいと考えています。

4

3 に答える 3

2

名前ではなく、インデックスで列を検索できます。次のいずれかが機能します。

id = objDR(0)
id = objDR.GetInt32(0)

それ以外の場合は、"As" キーワードまたは二重引用符 (ANSI 標準) を使用してエイリアスを作成することをお勧めします。

于 2013-08-12T18:38:25.147 に答える
0

あなたの場合、内部結合のため、select 句に両方を含める必要はありません。同等性が必要なため、どちらか一方のみを含めてください。

だからどちらか

SELECT Person.URN 
FROM   Person INNER JOIN 
       Car ON Person.URN = Car.URN AND PersonID=1

また

SELECT Car.URN 
FROM   Person INNER JOIN 
       Car ON Person.URN = Car.URN AND PersonID=1
于 2013-08-12T18:40:10.930 に答える