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

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

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

InBlock.gif            
catch (System.Exception ex)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                Console.Write(ex.Message.ToString());
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

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

ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

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

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

ExpandedSubBlockEnd.gif            }

InBlock.gif            
ExpandedBlockEnd.gif        }

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

转载于:https://www.cnblogs.com/aion111/archive/2010/07/16/1778956.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值