Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何从复选框选择返回数据库字段?_Database_Visual Studio 2010_Checkbox - Fatal编程技术网

Database 如何从复选框选择返回数据库字段?

Database 如何从复选框选择返回数据库字段?,database,visual-studio-2010,checkbox,Database,Visual Studio 2010,Checkbox,下面的代码返回给定表(“Employee”)的字段,但我需要返回给定数据库中所有表的字段,这可能吗?我的假设是一个For循环,循环数据库中的表并打印相应的字段,但我的努力似乎是徒劳的 Public Sub getDbFields() Dim i As Integer Dim dbcon As New System.Data.OleDb.OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source = " &

下面的代码返回给定表(“Employee”)的字段,但我需要返回给定数据库中所有表的字段,这可能吗?我的假设是一个For循环,循环数据库中的表并打印相应的字段,但我的努力似乎是徒劳的

Public Sub getDbFields()

    Dim i As Integer
    Dim dbcon As New System.Data.OleDb.OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source = " & dblocation & _
                                               "\" & dbname)
    Try

        dbcon.Open()
        dbDt = dbcon.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Columns, New Object() _
                                         {Nothing, Nothing, "Employee", Nothing})

        For i = 0 To dbDt.Rows.Count - 1
            'compile lbtables with a list of available tables from the database
            newLine()
            frmMain.lstTables.Items.Add(dbDt.Rows(i)!COLUMN_NAME.ToString())
        Next

    Catch ex As Exception
        MessageBox.Show(ex.Message.ToString(), "Data Load Error", MessageBoxButtons.OK,
            MessageBoxIcon.Exclamation)
    End Try

End Sub

此例程将通过选中复选框触发,这将返回数据库中的所有列

Using con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" + 
                          "Data Source=" + dblocation + "\" + dbname)
    con.Open()
    Dim schema as DataTable = con.GetSchema("COLUMNS")
    Dim dr as DataRow
    For Each dr in schema.Rows
        Dim tablename as string = dr("TABLE_NAME").ToString()    
        if Not tablename.StartsWith("MSys") then
            Console.WriteLine(dr("TABLE_NAME").ToString() + " " + dr("COLUMN_NAME").ToString())
        End if        
    Next    
End Using
请注意,vb.net中不允许使用bang(!)语法。
如果您更改代码,您的代码也可以工作

 dbDt = dbcon.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Columns, New Object() _ 
                                          {Nothing, Nothing, Nothing, Nothing}) 
这条线呢

frmMain.lstTables.Items.Add(dbDt.Rows(i)("COLUMN_NAME").ToString()) 

如何简单地显示可用表的所有字段?你的工作按计划进行,除了它们中有一些默认的MSsysAccess表,我不想显示,我如何删除它们?我发现你的解决方案更容易理解,我的解决方案是在MSDN的帮助下构建的,我不太确定GetOleDbSchemaTable()和GetSchema()方法之间的区别(除了代码量!!)当TABLE_NAME列以“MSys”开头时,只需将该列从输出中排除即可,答案已更新谢谢,我希望它能正常工作。然而,为了学习puposes,在循环中声明一个变量是不是不好的做法?哦,不,你为什么这么认为?。这样的局部变量有助于编写更可读的代码。有时它们是不必要的,但编译器足够聪明,可以优化您的代码,而且,如果您以编写代码为生,您在将来理解自己的代码时会遇到更少的问题。