在C#中,如何知道SQL Server中的表列是否为自动数字?

在C#中,如何知道SQL Server中的表列是否为自动数字?,c#,sql-server,ms-access,auto-increment,C#,Sql Server,Ms Access,Auto Increment,我需要在C#中知道SQLServer2005中表的一列是否为自动数字。我知道,如果我进行查询以获得一个DataTable,并遍历列,那么我可以使用 if (table.Columns[i].AutoIncrement) bla bla 问题是,AutoIncrement总是false,即使该列是一个标识和AutoIncrement列,我也不知道如何找到它,除此之外 不过,我想知道Access数据库也是如此 非常感谢 您需要做的是调用GetSchema方法来检索数据库模式/元数据,而不仅仅是数据

我需要在C#中知道SQLServer2005中表的一列是否为自动数字。我知道,如果我进行查询以获得一个DataTable,并遍历列,那么我可以使用

if (table.Columns[i].AutoIncrement) bla bla
问题是,AutoIncrement总是false,即使该列是一个标识和AutoIncrement列,我也不知道如何找到它,除此之外

不过,我想知道Access数据库也是如此


非常感谢

您需要做的是调用
GetSchema
方法来检索数据库模式/元数据,而不仅仅是数据库中的数据,请查看以下内容:


您可以通过使用
Microsoft.SqlServer.Management.Smo
命名空间为
SQLServer2005
实现这一点-

string conn=string.Format(@“数据源={0};初始目录={1};用户ID={2};密码={3}”,
“数据源名称”、“数据库”、“用户名”、“密码”);
Microsoft.SqlServer.Management.Smo.Server s=新的Microsoft.SqlServer.Management.Smo.Server(
新建Microsoft.SqlServer.Management.Common.ServerConnection(
新建System.Data.SqlClient.SqlConnection(
康涅狄格州);
Microsoft.SqlServer.Management.Smo.Database db=
s、 数据库[“您的数据库名称”];
Microsoft.SqlServer.Management.Smo.Table tbl=
db.表[0]//或者,您可以通过表名获取表
列表自动递增CLMNS=
新列表();
foreach(Microsoft.SqlServer.Management.Smo.Column clmn在tbl.Columns中)
{
if(clmn.IdentityIncrement>0)//检查此列是否为自动增量
自动递增clmns.Add(clmn);
}
SMO所需的组件包括:

  • Microsoft.SqlServer.ConnectionInfo
  • Microsoft.SqlServer.Management.Sdk.Sfc
  • Microsoft.SqlServer.Smo

您的\u系统\u驱动器\u名称:\Program Files\Microsoft SQL Server\100\SDK\Assemblys\

中找到您正在对数据库进行哪个查询以填充数据表?只是一个精选的*?谢谢,我已经通过以下代码实现了我想要的:DataTable schema=reader.GetSchemaTable();foreach(schema.Rows中的DataRow){如果(bool.Parse(row[schema.Columns[“IsAutoIncrement”].Ordinal].ToString())返回true;}那么您必须更改一些对象并使用Oledbconnection而不是SqlConnection,尝试这样做并让我们知道;-)我已经这样做了,但问题是Access返回的数据类型是一个数字,而不是真正的类型,我不知道如何翻译它。对不起,我在上一个答案之后看到了你的答案,这个答案对我有效。但是谢谢你的帮助!
string conn = string.Format(@"Data Source={0};Initial Catalog={1};User ID={2};Password={3}",
            "DATASOURCENAME", "DB", "USERNAME", "PASSWORD");

 Microsoft.SqlServer.Management.Smo.Server s = new Microsoft.SqlServer.Management.Smo.Server(
                    new Microsoft.SqlServer.Management.Common.ServerConnection(
                        new System.Data.SqlClient.SqlConnection(
                    conn)));

 Microsoft.SqlServer.Management.Smo.Database db =
                    s.Databases["YOUR_DATA_BASE_NAME"];
                Microsoft.SqlServer.Management.Smo.Table tbl =
                    db.Tables[0];//Or you can get the table by table name

 List<Microsoft.SqlServer.Management.Smo.Column> autoIncrementClmns = 
                    new List<Microsoft.SqlServer.Management.Smo.Column>();

 foreach (Microsoft.SqlServer.Management.Smo.Column clmn in tbl.Columns)
  {
     if (clmn.IdentityIncrement > 0)//Check if this column is AutoIncrement
         autoIncrementClmns.Add(clmn);
  }