2015-10-20 79 views
0

下面是展示我如何獲得返回結果從SQL Server一些簡單的示例代碼:VB.NET SQLCLIENT表名曖昧

Dim dtbTable As System.Data.DataTable 
Dim sdaDataAdapter As New System.Data.SqlClient.SqlDataAdapter() 
sdaDataAdapter = New System.Data.SqlClient.SqlDataAdapter("SELECT * FROM A; SELECT * FROM B", Connection) 

dtbTable = New System.Data.DataTable() 
dtbTable.Locale = System.Globalization.CultureInfo.InvariantCulture 
sdaDataAdapter.Fill(dtbTable) 

sdaDataAdapter = Nothing 
objCommandBuilder = Nothing 

在.NET中,表一會出來表和表B將出來TABLE1 ...我想讓他們保存真正的表名。

如何從SQL查詢中獲取表的真實表名?所有的列名是正確的,但表出來TABLE,TABLE1,TABLE2 ...我顯然知道如何在我的代碼中設置它們或解析表名並將它們設置在代碼中...我想知道爲什麼.Net丟失首先是表名,如果有辦法讓他們不要變成不明確的名字。

爲什麼SQLClient驅動程序的編寫者不會認爲我們關心表名?

來自任何人的任何想法,以解決這個問題,而不必手動設置表名稱?

+3

「<回答到SQL的問題在這裏>」 – Plutonix

+0

你能展現複雜的SQL?它可能有助於回答命名改變的原因。 –

+0

如果表名保存在我運行的任何SQL ... .Net中,將會使用TABLE,TABLE1,TABLE2等表名轉換每個表... – Jeff

回答

0

以下是兩種方法 - 將表格映射到DataTables,並以所需名稱一次加載一張表格。

Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click 
    Dim Connection As New SqlConnection(OISConnectString) 
    Connection.Open() 
    Dim da As New System.Data.SqlClient.SqlDataAdapter("SELECT * FROM FIS..FIS_Log; SELECT * FROM FIS..FIS_Log_CA", Connection) 
    Dim ds As New DataSet 
    da.Fill(ds) 

    Debug.Print(ds.Tables(0).TableName) ' Table 
    Debug.Print(ds.Tables(1).TableName) ' Table1 

    Dim dtLog As DataTable = ds.Tables(0) 
    Dim dtLog_CA As DataTable = ds.Tables(1) 

    ' work with DataTables by name 

    Stop 
    'reset 
    ds = Nothing 
    da = Nothing 

    ds = New DataSet() 

    da = New SqlDataAdapter("SELECT * FROM FIS..FIS_Log", Connection) 
    da.Fill(ds, "FIS_Log") 
    da = New SqlDataAdapter("SELECT * FROM FIS..FIS_Log_CA", Connection) 
    da.Fill(ds, "FIS_Log_CA") 

    Debug.Print(ds.Tables(0).TableName) ' Table 
    Debug.Print(ds.Tables(1).TableName) ' Table1 

    dtLog = ds.Tables("FIS_Log") 
    dtLog_CA = ds.Tables("FIS_Log") 

    Connection.Close() 
End Sub 

您可能會發現TableAdapterManager有用取決於你的平臺

+0

感謝您的提示,但這兩種方法都是不夠通用......我希望有一種方式,.Net可以找出真正的表名......就像列名一樣。它不命名列Column1。 Column2,Column3 ......它知道真名。爲什麼它不知道表的真實名稱?也許TableAdapterManager可能更聰明...沒有足夠的工作。謝謝! – Jeff

+0

查詢不一定有表名 - 查詢本身導致一個表。例如您可以構建查詢以將多個表連接在一起 - 您希望ADO.Net返回什麼結果?你正在構建SQL,你爲什麼不知道「表名?」 – rheitzman

+0

我可以...我只是希望如果查詢有主表名稱,ADO可以解決它。它甚至不嘗試。即使有10個連接,它也可能只是主要的FROM

作爲表名。我想我會繼續按照我多年來的做法命名它...... – Jeff