VB.NET SQLClient表名称不明确

VB.NET SQLClient表名称不明确,vb.net,Vb.net,下面是一些简单的示例代码,演示如何从SQL Server返回结果: 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) dtbTab

下面是一些简单的示例代码,演示如何从SQL Server返回结果:

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中,表A将出现在表中,表B将出现在表1中。。。我想让他们保留他们的真实姓名

如何从SQL查询中获取表的真实表名?所有的列名都是正确的,但是表出来了表,表1,表2。。。我显然知道如何在代码中设置它们,或者解析表名并在代码中设置它们。。。我想知道为什么.Net一开始就放松了表名,是否有办法使它们不变成模棱两可的名称

为什么SQLClient驱动程序的编写者不认为我们关心表名


任何人有什么想法可以绕过这个问题,而不必手动设置表名

这里有两种方法-将表映射到
数据表
,并使用所需名称一次加载
数据集
一个表

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很有用,具体取决于您的平台。

“您能展示一下复杂的sql吗?这可能有助于回答命名更改的原因。如果表名保存在我运行的任何SQL上,那就太好了。Net将使用表名转换每个表,如table、TABLE1、TABLE2…感谢您的提示,但这两种方法都不够通用。。。我希望有一种方法可以让.Net找出真正的表名。。。就像列名一样。它没有将列命名为Column1。第二栏,第三栏。。。它知道真名。为什么它不知道这些表的真实名称?也许TableAdapterManager更聪明。。。我在这方面做得还不够。谢谢查询不一定有表名——查询本身会生成一个表。e、 您可以构建一个查询来将多个表连接在一起—您希望ADO.Net返回什么?您正在构建SQL,为什么不知道“表名?”我可以。。。我只是希望如果查询有一个主表名,ADO可以解析它。它甚至不尝试。即使有10个联接,也可以将主联接作为表名。我想我会继续用我多年来一直使用的方式命名它……在上面的代码(下半部分)中,我不知道重用DataAdapter是否是一个问题。更新可能有问题。