这是我的代码.我得到了数据库中存在的所有表名和列名.现在我需要知道列的类型.比如它的int或varchar或其他什么.可以帮助我吗?顺便说一下这是C#.
OleDbConnection con = new OleDbConnection(connectionString);
DataTable schemaCols;
DataTable schemaTbl;
List<string> tablesnames = new List<string>();
string returnString="";
try
{
con.Open();
object[] objArrRestrict;
objArrRestrict = new object[] { null, null, null, "TABLE" };
schemaTbl = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, objArrRestrict);
foreach (DataRow row in schemaTbl.Rows)
{
tablesnames.Add(row["TABLE_NAME"].ToString());
}
List<string> columnnames = new List<string>();
foreach (string str in tablesnames)
{
string selTbl = str;
//con.Open();
object[] objArrRestrictNew;
objArrRestrictNew = new object[] { null, null, selTbl, null };
//
schemaCols = con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, objArrRestrictNew);
foreach (DataRow row in schemaCols.Rows)
{
columnnames.Add(row["COLUMN_NAME"].ToString());
}
}
}
Run Code Online (Sandbox Code Playgroud)
您也可以从OleDb检索列类型
DataTable schemaTable = connection.GetOleDbSchemaTable(
System.Data.OleDb.OleDbSchemaGuid.Columns,
new object[] { null, null, null, null });
Run Code Online (Sandbox Code Playgroud)
schemaTable的DATA_TYPE列包含可以强制转换为OleDbType的整数
如果你需要数据类型,你可以使用类似于此的转换函数(我将它用于mdb和accdb文件,但我知道它应该被增强)
private static string ConvertToJetDataType(int oleDbDataType)
{
switch (((OleDbType)oleDbDataType))
{
case OleDbType.LongVarChar:
return "varchar";
case OleDbType.BigInt:
return "int"; // In Jet this is 32 bit while bigint is 64 bits
case OleDbType.Binary:
case OleDbType.LongVarBinary:
return "binary";
case OleDbType.Boolean:
return "bit";
case OleDbType.Char:
return "char";
case OleDbType.Currency:
return "decimal";
case OleDbType.DBDate:
case OleDbType.Date:
case OleDbType.DBTimeStamp:
return "datetime";
case OleDbType.Decimal:
case OleDbType.Numeric:
return "decimal";
case OleDbType.Double:
return "double";
case OleDbType.Integer:
return "int";
case OleDbType.Single:
return "single";
case OleDbType.SmallInt:
return "smallint";
case OleDbType.TinyInt:
return "smallint"; // Signed byte not handled by jet so we need 16 bits
case OleDbType.UnsignedTinyInt:
return "byte";
case OleDbType.VarBinary:
return "varbinary";
case OleDbType.VarChar:
return "varchar";
case OleDbType.BSTR:
case OleDbType.Variant:
case OleDbType.VarWChar:
case OleDbType.VarNumeric:
case OleDbType.Error:
case OleDbType.WChar:
case OleDbType.DBTime:
case OleDbType.Empty:
case OleDbType.Filetime:
case OleDbType.Guid:
case OleDbType.IDispatch:
case OleDbType.IUnknown:
case OleDbType.UnsignedBigInt:
case OleDbType.UnsignedInt:
case OleDbType.UnsignedSmallInt:
case OleDbType.PropVariant:
default:
throw new ArgumentException(string.Format("The data type {0} is not handled by Jet. Did you retrieve this from Jet?", ((OleDbType)oleDbDataType)));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8075 次 |
| 最近记录: |