2014-11-21 50 views
0

我有一系列的excel文档,所有这些文档都有不同的结构,我试图导入到SQL数据库中。我提出的解决方案是让用户将电子表格中的列与数据库中的列进行映射。我遇到的问题是逐个获取数据库列名,我可以一次使用Microsoft SQL Server Management Studio中的以下SQL命令将它们全部获取,但我可以为我的生活获取它来遍历它们,并且我不知道我会如何将其转换为vb.net。逐个遍历表中的每个列名称

SELECT [name] AS [Column Name] 
FROM syscolumns 
WHERE id = (SELECT id FROM sysobjects WHERE type = 'U' AND [Name] = 'table1') 

我目前拥有的用户从列表框中选择电子表格列,我想数据库列出现在它上面的标签,这样当用户点击接下来我就可以重新设置列表框,并移动到下一个数据库列,同时将两个列名映射到二维数组中。

+0

你在VB做尝试,并通过迭代列? – Jaques 2014-11-21 08:16:30

+0

你想在vb.net中做到吗?提供更多信息。你想要完成什么。你想在哪里迭代列?你为什么要使用vb.net? – Jaques 2014-11-21 08:18:13

+0

我试图使用TableAdapter,但没有得到它的工作,所以基本上即时在完全损失,所以任何帮助将不胜感激。 – crackruckles 2014-11-21 08:18:55

回答

1

试试这个

 using (var conn = new SqlConnection("<your connection string>)")) 
     using (var cmd = new SqlCommand("SELECT * from table1)", conn)) 
     { 
      conn.Open(); 
      using (var reader = cmd.ExecuteReader()) 
      { 
       for (int i = 0; i < reader.FieldCount; i++) 
       { 
        reader.GetName(i); 
       } 
      } 
     } 
+0

好吧,我可以让所有的工作,除了你已经把//Debug.WriteLn(阅读[“名称”] ToString()); 我无法找到翻译。 – crackruckles 2014-11-21 08:57:13

+0

我刚刚在那里添加了它。那就是你将填充你的组合的地方。无论如何,语法可能是错误的。这只是一个评论 – Jaques 2014-11-21 09:13:03

+0

感谢您的帮助,我设法弄清楚,生病发布答案我下面提出。 – crackruckles 2014-11-21 09:16:47

0
Using conn As New SqlConnection(My.Settings.UK_DATABASE_2014ConnectionString) 
     Using cmd As New SqlCommand("select * from table1;", conn) 
      conn.Open() 
      Dim reader As SqlDataReader = cmd.ExecuteReader() 
      If i >= reader.FieldCount Then 
       Return True 
      Else 
       Label1.Text = reader.GetName(i) 
       i = i + 1 
      End If 
     End Using 
    End Using 
+0

修复你的循环。在读者你有reader.FieldCount,那么你不需要如果或退出 – Jaques 2014-11-21 09:26:34

+0

我已经更新了我的答案,告诉你 – Jaques 2014-11-21 09:31:52

+0

它看起来像伟大的思想认为,我刚刚注意到并修复它与FieldCount :) – crackruckles 2014-11-21 09:40:03