• .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个值,第一个是表名(没记错就是),第二个是字段名,第三个就是是否为自动增长类型了,第四个好象是判断数据库是否区分大小写,第五个一直没搞清楚
                    {
                        
    //这个列是自动编号列
                    }

                }

                
            }

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

  • 相关阅读:
    ComboBoxEdit 方法与属性设置
    Devpress.XtraGrid.GridControl 笔记
    C#中的多线程入门
    comboBox获取value中的值
    sql查询去掉以多列为条件的重复值
    DEV控件:gridControl常用属性设置
    C# MessageBox.Show 用法
    跨服务器与连接不同数据库 不跨服务器连接库存表
    无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 的数据源对象
    .Net Windows服务程序中获取安装程序所在目录
  • 原文地址:https://www.cnblogs.com/aion111/p/1778956.html
Copyright © 2020-2023  润新知