2015-10-20 43 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