取列名的特定表
您可以通过给定查询获取架构信息的OleDb使用SchemaOnly CommandBehavior和GetSchemaTable方法,如下所示:
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]);
}
}
}
sir其返回列名与小写像我有columnname = OBJECTID但它是返回objectid – 2015-11-17 11:35:50
此检索所有表的所有列和视图
DataTable schemaTable = ((OleDbConnection)jetConnection).GetOleDbSchemaTable(
System.Data.OleDb.OleDbSchemaGuid.Columns,
new object[] { null, null, null, null });
布比的方法的特定表的变体:
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文件。
如果您在具有Memo或Attachment列(在accdb文件中可用)的表上使用此代码,它将以字符串(wchar)的形式返回这些列的类型。
我已经很难找到有关如何处理这些类型的列多的信息,所以我想提供一个链接到文章,帮助我弄清楚如何处理它们:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/d15606f9-f38d-4a1b-8ce3-000c558e79c5
我拿着该线程中的底层示例并将其转换为C#。我确实有这个using语句添加到模块,以避免将所有引用的编辑,以“AccessDao”:
using AccessDao = Microsoft.Office.Interop.Access.Dao;
我道歉,用于定位到一个古老的线程,但我用这个线程为出发写我的代码点,并没有立即意识到这个问题。
您需要提供更多信息。你如何访问数据库? – 2010-09-23 02:44:38
@Daniel这是我的连接字符串.. string strConnection =“Provider = Microsoft.Jet.OLEDB.4.0; Data Source =”+ System.Environment.CurrentDirectory +“\\ test.mdb”; – 2010-09-23 02:48:35
你使用'SqlConnection'来访问数据库吗? – 2010-09-23 02:54:16