.NET获取ACCESS自动编号列的一种方法(转)

我之前上网查阅了相关的信息,发现这方面的文章不是太多,虽然不长用,但是有时真要用时使人抓...
我说下我的思路
首先我们需要数据库的架构信息,获得表名(其实我个人认为可以获得数据库各表的PrimaryKey已经足够了,因为.Net的Guid.NewGuid()方法做主键实在是太好了),然后根据表名循环查询除系统表之外的所有表来获取相关信息.很遗憾,我原先一直打算只用ADO.NET就完成所有的事情,但是寻找了好久都没有发现相关的方法,当然这和个人的水平有着重要的因素,不罗嗦了下面是代码

public void ACCESS_MSG(string DataPath)
        
{
            
try
            
{
                System.Data.DataTable dt 
= new System.Data.DataTable();
                System.Data.OleDb.OleDbConnection conn 
= new System.Data.OleDb.OleDbConnection();
                DataOpt.Data opt 
= new DataOpt.Data();
                conn 
= opt.OLEDBCONN(DataPath);//这里是我自己写的连接类
                dt=conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Primary_Keys, null);//这里获取数据的架构信息
                Get_TableName(dt,DataPath);
                conn.Close();
            }

            
catch (System.Exception ex)
            
{
                Console.Write(ex.Message.ToString());
            }

        }

        
protected void Get_TableName(System.Data.DataTable TableMsg, string DataPath)
        
{
            
int i = 0;
            
string TableName = "", ParmetersList="",PrimaryKeys="";
            
for (i = 0; i < TableMsg.Rows.Count; i++)
            
{
                
if (TableMsg.Rows[i]["Table_Name"].ToString().Contains("MSys"!= true)
                
{
                    TableName 
= TableMsg.Rows[i]["Table_Name"].ToString().ToUpper();
                    Console.WriteLine(TableName);
                    PrimaryKeys 
= TableMsg.Rows[i]["COLUMN_NAME"].ToString();
                    ParmetersList 
= Get_ParmeterList(TableName, DataPath);
                    DataOpt_Table(TableName, DataPath, ParmetersList, PrimaryKeys);
                    
                }

            }

        }

以上代码已经获取了除系统表外所有用户表的名,下面开始获取自动编号列,我使用了ADO,非ADO.NET...

protected void Get_AutoID(string TableName)
        
{
            ADODB.Recordset rs 
= new ADODB.Recordset();
            
string conn = "你的数据库连接";
            
int i = 0;
            rs.Open(
"select * from " + TableName, conn, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic, -1);
            
for (i = 0; i < rs.Fields.Count; i++)
            
{
                
if (rs.Fields[i].Properties[2].Value = true)//这里的特性集合中有5个值,第一个是表名(没记错就是),第二个是字段名,第三个就是是否为自动增长类型了,第四个好象是判断数据库是否区分大小写,第五个一直没搞清楚
                {
                    
//这个列是自动编号列
                }

            }

            
        }

好了至此自动编号列被取出了..

原文地址:https://www.cnblogs.com/aion111/p/1778956.html