问题:如何获取access2007的所有表名和表结构
其实要这些信息无非是想弄一个代码生成器.可是由于对access2007只限于"会用",所以不清除内部的原理.从网上找了一些代码,都要用到msysObjects这个系统表.但是在access2007中默认是不允许访问这个表的.不知道如何设置才可以用代码访问系统表.知道的兄弟们最好些的详细一些.贴图说明最好^^.
当然如果有其它的方式获得所有表名和表结构也行.
最好是C#代码,特别声明:一定是access2007,且如果需要设置系统表访问权限的一定要写详细一些如何进行设置.
其实要这些信息无非是想弄一个代码生成器.可是由于对access2007只限于"会用",所以不清除内部的原理.从网上找了一些代码,都要用到msysObjects这个系统表.但是在access2007中默认是不允许访问这个表的.不知道如何设置才可以用代码访问系统表.知道的兄弟们最好些的详细一些.贴图说明最好^^.
当然如果有其它的方式获得所有表名和表结构也行.
最好是C#代码,特别声明:一定是access2007,且如果需要设置系统表访问权限的一定要写详细一些如何进行设置.
解决方案 »
- ADO.NET,请教DataTableMapping类
- 多栏树形表头。自写控件,望大家支持
- 恳求大家帮助!555555555555
- =========ComboBox实现类似于IE地址栏的问题,但是要跟Value绑定==========
- CrystalReport for Visual Studio 2005中如何取得CrystalReport的Column的Name!!!
- 其实我不想来这儿的!!!
- 如何获取鼠标所在的位置?及如何计算拖动的距离?
- 这个SQL数据库里的表要怎样写约束呢?
- CrystalReport9.2和vs.net2003的結合問題(200分)之二
- 请问没有DataSource如何使用DataGrid?
- richtextbox滚动条问题
- 在自定义类中定义事件,在窗体上注册并调用事件处理函数怎么还会出现无法操作控件的问题的啊?
转来的,没试过~
OleDbConnection conn = new OleDbConnection(accpath);
conn.Open();
DataTable dt = conn.GetSchema("Tables");
for(int i=0;i<dt.Rows.Count;i++)
{
if(dt.Rows[i].ItemArray[3].ToString()=="TABLE")
Console.Writeln(dt.Rows[i].ItemArray[2].ToString());
} 2.遍历dt
用select * from tablename where 1=0提取DataSet
注意要sda.FillSchema(ds);
从ds.Tables[0].Columns[]集合里提取数据库结构。
特别声明:我没找到通过设置access2007系统表的方式来获得想要的数据//获取表信息
using (OleDbConnection v_Con = new OleDbConnection())
{
v_Con.ConnectionString = "access2007连接字符串";
v_Con.Open();
//获取所有用户自定义数据表
DataTable v_dt = v_Con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
}//获取表中字段的信息,假如存在一个名为:StudentInfo的基础数据表
using (OleDbConnection v_Con = new OleDbConnection())
{
v_Con.ConnectionString = "access2007连接字符串";
v_Con.Open();
DataTable v_dt = v_Con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, "StudentInfo", null });
//将查询到的数据按照字段在表中的顺序排序
dt.DefaultView.Sort = "ordinal_position asc";
DataView v_dvColumn = v_dt.DefaultView;
}上面的代码可以获取到表和字段的说明。下面是Access中Data_type的说名,代码是摘自别人的博客,只是把VB的改成了C#代码switch (data_type)
{
//case常量 值 说明
//case 0x2000
// :p = AdArray //(不适用于 ADOX。) 0x2000 一个标志值,通常与另一个数据类型常量组合,指示该数据类型的数组。
case 20:
p = "adBigInt 20 指示一个八字节的有符号整数 (DBTYPE_I8)。";
case 128:
p = "adBinary 128 指示一个二进制值 (DBTYPE_BYTES)。";
case 11:
p = "adBoolean 指示一个布尔值 (DBTYPE_BOOL)。";
case 8:
p = "adBSTR 8 指示以 Null 终止的字符串 (Unicode) (DBTYPE_BSTR)。";
case 136:
p = "adChapter 136 指示一个四字节的子集值,标识子行集合中的行 (DBTYPE_HCHAPTER)。";
case 129:
p = "adChar129 指示一个字符串值 (DBTYPE_STR)。";
case 6:
p = "adCurrency 6 指示一个货币值 (DBTYPE_CY)。货币是一个定点数字,小数点右侧有四位数字。该值存储为八字节、范围为 10,000 的有符号整数。";
case 7:
p = "adDate 7 指示日期值 (DBTYPE_DATE)。日期保存为双精度数,数字的整数部分是从 1899 年 12 月 30 日算起的天数,小数部分是一天当中的片段时间。";
case 133:
p = "adDBDate 133 指示日期值 (yyyymmdd) (DBTYPE_DBDATE)。";
case 134:
p = "adDBTime 134 指示时间值 (hhmmss) (DBTYPE_DBTIME)。";
case 135:
p = "adDBTimeStamp 135 指示日期/时间戳(yyyymmddhhmmss 加十亿分之一的小数)(DBTYPE_DBTIMESTAMP)。";
case 14:
p = "adDecimal 14 指示具有固定精度和范围的确切数字值 (DBTYPE_DECIMAL)。";
case 5:
p = "adDouble 5 指示一个双精度浮点值 (DBTYPE_R8)。";
case 0:
p = "adEmpty 0 指定没有值 (DBTYPE_EMPTY)。";
case 10:
p = "adError 10 指示一个 32 位的错误代码 (DBTYPE_ERROR)。";
case 64:
p = "adFileTime 64 指示一个 64 位的值,表示从 1601 年 1 月 1 日开始的 100 个十亿分之一秒间隔的数量 (DBTYPE_FILETIME)。";
case 72:
p = "adGUID 72 指示全局唯一标识符 (GUID) (DBTYPE_GUID)。";
case 9:
p = "adIDispatch 9 指示指向 COM 对象上 IDispatch 接口的指针 (DBTYPE_IDISPATCH)。";
//注意 ADO 目前不支持这种数据类型。使用它可能导致不可预料的结果。
case 3:
p = " adInteger 3 指示一个四字节的有符号整数 (DBTYPE_I4)。";
case 13:
p = "adIUnknown 13 指示指向 COM 对象上 IUnknown 接口的指针 (DBTYPE_IUNKNOWN)。";
//注意 ADO 目前不支持这种数据类型。使用它可能导致不可预料的结果。
case 205:
p = "adLongVarBinary 205 指示一个长二进制值(仅限于 Parameter 对象)。";
case 201:
p = " adLongVarChar 201 指示一个长字符串值(仅限于 Parameter 对象)。";
case 203: p = "adLongVarWChar 203 指示一个以 Null 终止的长 Unicode 字符串值(仅限于 Parameter 对象)。";
case 131:
p = "adNumeric 131 指示具有固定精度和范围的确切数字值 (DBTYPE_NUMERIC)。";
case 138:
p = "adPropVariant 138 指示一个 Automation PROPVARIANT (DBTYPE_PROP_VARIANT)。";
case 4:
p = "adSingle 4 指示一个单精度浮点值 (DBTYPE_R4)。";
case 2:
p = "adSmallInt 2 指示一个双字节的有符号整数 (DBTYPE_I2)。";
case 16:
p = "adTinyInt 16 指示一个单字节的有符号整数 (DBTYPE_I1)。";
case 21:
p = " adUnsignedBigInt 21 指示一个八字节的无符号整数 (DBTYPE_UI8)。";
case 19:
p = "adUnsignedInt 19 指示一个四字节的无符号整数 (DBTYPE_UI4)。";
case 18:
p = "adUnsignedSmallInt 18 指示一个双字节的无符号整数 (DBTYPE_UI2)。";
case 17:
p = "adUnsignedTinyInt 17 指示一个单字节的无符号整数 (DBTYPE_UI1)。";
case 132:
p = "adUserDefined 132 指示一个用户定义的变量 (DBTYPE_UDT)。";
case 204:
p = "adVarBinary 204 指示一个二进制值(仅限于 Parameter 对象)。";
case 200:
p = "adVarChar 200 指示一个字符串值(仅限于 Parameter 对象)。";
case 12:
p = "adVariant 12 指示一个 Automation Variant (DBTYPE_VARIANT)。"; //注意 ADO 目前不支持这种数据类型。使用它可能导致不可预料的结果。
case 139:
p = "adVarNumeric 139 指示一个数字值(仅限于 Parameter 对象)。";
case 202:
p = "adVarWChar 202 指示一个以 Null 终止的 Unicode 字符串(仅限于 Parameter 对象)。";
case 130:
p = "adWChar 130 指示一个以 Null 终止的 Unicode 字符串 (DBTYPE_WSTR)。";
}