Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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
C# 获取特定表的列名_C#_Database_Ms Access_Schema_Oledb - Fatal编程技术网

C# 获取特定表的列名

C# 获取特定表的列名,c#,database,ms-access,schema,oledb,C#,Database,Ms Access,Schema,Oledb,我想获取特定表的所有列名 我使用的是msaccess和C.net 2008。您可以通过OleDb仅使用SchemaOnly和方法获取给定查询的架构信息,如下所示: var conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=NWIND.mdb"; using (var con = new OleDbConnection(conStr)) { con.Open(); using (var cmd = new OleDbCom

我想获取特定表的所有列名


我使用的是msaccess和C.net 2008。

您可以通过OleDb仅使用SchemaOnly和方法获取给定查询的架构信息,如下所示:

var conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=NWIND.mdb";
using (var con = new OleDbConnection(conStr))
{
    con.Open();
    using (var cmd = new OleDbCommand("select * from Suppliers", con))
    using (var reader = cmd.ExecuteReader(CommandBehavior.SchemaOnly))
    {
        var table = reader.GetSchemaTable();
        var nameCol = table.Columns["ColumnName"];
        foreach (DataRow row in table.Rows)
        {
            Console.WriteLine(row[nameCol]);
        }
    }
}

这将检索所有表和视图的所有列

        DataTable schemaTable = ((OleDbConnection)jetConnection).GetOleDbSchemaTable(
          System.Data.OleDb.OleDbSchemaGuid.Columns,
          new object[] { null, null, null, null });

bubi方法对特定表格的一种变体:

public List<string> GetTableColumnNames(string tableName)
{
  var conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=NWIND.mdb";
  using (var connection = new OleDbConnection(conStr))
  {
    connection.Open();
    var schemaTable = connection.GetOleDbSchemaTable(
      OleDbSchemaGuid.Columns,
      new Object[] { null, null, tableName });
    if (schemaTable == null)
      return null;

    var columnOrdinalForName = schemaTable.Columns["COLUMN_NAME"].Ordinal;

    return (from DataRow r in schemaTable.Rows select r.ItemArray[columnOrdinalForName].ToString()).ToList();
  }
}
当然,在获取表的列名之前,您可能首先要检查表是否确实存在:

public bool TableExists(string tableName)
{
  var conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=NWIND.mdb";      
  using (var connection = new OleDbConnection(conStr))
  {
    connection.Open();
    var tables = connection.GetSchema("Tables");
    var tableExists = false;
    for (var i = 0; i < tables.Rows.Count; i++)
    {
      tableExists = String.Equals(tables.Rows[i][2].ToString(),
                           tableName,
                           StringComparison.CurrentCultureIgnoreCase);
      if (tableExists)
        break;
    }
    return tableExists;
  }
}

我在尝试构建一个C应用程序来迁移Access数据库时发现了这篇文章。我正在迁移的数据库是一个扩展名为.accdb的Access 2007/2010文件

如果在accdb文件中有可用的备注或附件列的表上使用此代码,它将以字符串wchar的形式返回这些列的类型

我很难找到很多关于如何处理这些类型的列的信息,因此我想提供一个链接,链接到帮助我找到如何处理这些列的文章:

我在该线程中使用了底部示例,并将其转换为C。我必须将这个using语句添加到模块中,以避免编辑对AccessDao的所有引用:

using AccessDao = Microsoft.Office.Interop.Access.Dao;

很抱歉,我添加了一个旧线程,但我使用此线程作为编写代码的起点,并没有立即意识到这一点。

您需要提供更多信息。你是如何访问数据库的?@Daniel这是我的连接字符串。。字符串strConnection=Provider=Microsoft.Jet.OLEDB.4.0;数据源=+System.Environment.CurrentDirectory+\\test.mdb;您是否使用SqlConnection访问数据库?@Daniel我使用OleDb访问数据库。。抱歉,我是.net的新手。它返回的列名使用小写字母,就像我的columnname=OBJECTID一样,但它返回的是OBJECTID