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

发布于 2024-12-05 13:24:44 字数 299 浏览 1 评论 0原文

我需要在 C# 中知道 SQL Server 2005 中表的列是否是自动数值的。我知道,如果我进行查询来获取 DataTable 并浏览列,我可以使用类似的

if (table.Columns[i].AutoIncrement) bla bla

内容 问题是 AutoIncrement 始终为 false,即使该列是 Identity 和 autoincrement 列,而且我不知道除了这种方式之外,如何找出这一点。

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

非常感谢!!

I need to know in C# if a column of a Table in SQL Server 2005 is autonumeric. I know that if I make a query to get a DataTable and I go through the columns, I could use something like

if (table.Columns[i].AutoIncrement) bla bla

The problem is that AutoIncrement is always false, even when the column is an Identity and autoincrement column, and I don't know how to find out this, besides this way.

I would like to know the same for an Access database, though.

Thank you very much!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

执妄 2024-12-12 13:24:44

您需要做的是调用 GetSchema 方法来检索数据库架构/元数据,而不仅仅是数据库中的数据,请查看此处:

GetSchema 和架构集合 (ADO.NET)

what you need to do is call the GetSchema method to retrieve also the db schema / metadata and not only the data from the database, have a look here:

GetSchema and Schema Collections (ADO.NET)

够钟 2024-12-12 13:24:44

对于 SQL Server 2005,您可以通过使用 Microsoft.SqlServer.Management.Smo 命名空间来实现此目的 - 单击此处了解更多信息

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);
  }

SMO 所需的程序集是:

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

位于 YOUR_SYSTEM_DRIVE_NAME:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\

You can achieve this for SQL Server 2005 by using the Microsoft.SqlServer.Management.Smo namespace - Click here for more info

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);
  }

Needed assemblies for SMO are:

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

Found at YOUR_SYSTEM_DRIVE_NAME:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文