在C#中怎么获取数据库的自动编号字段
2个回答
展开全部
.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个值,第一个是表名(没记错就是),第二个是字段名,第三个就是是否为自动增长类型了,第四个好象是判断数据库是否区分大小写,第五个一直没搞清楚
{
//这个列是自动编号列
}
}
}
我之前上网查阅了相关的信息,发现这方面的文章不是太多,虽然不长用,但是有时真要用时使人抓...
我说下我的思路
首先我们需要数据库的架构信息,获得表名(其实我个人认为可以获得数据库各表的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个值,第一个是表名(没记错就是),第二个是字段名,第三个就是是否为自动增长类型了,第四个好象是判断数据库是否区分大小写,第五个一直没搞清楚
{
//这个列是自动编号列
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询