none
请教专家,如何用ADO.net获得Sqlserver数据库表的主键? RRS feed

  • 问题

  • 我用Sqlconnection.Getchema()获取表的主键,根据联机帮助,我猜想可以从IndexColumns中获得,但得到的主键,外键KeyType都是56,我总不能用名字PK打头来判断是否主键吧。代码如下:
                    restrictions[2] = tabname;
                   // DataTable table = connection.GetSchema("Columns", restrictions);
                    DataTable tIndexes = connection.GetSchema("IndexColumns", restrictions);
                    string[] PrimaryKey = getPK(tIndexes);

    private  string[] getPK(DataTable tIndexes)
            {
                string[] PKs=new string[tIndexes .Rows.Count];
                foreach (DataRow row in tIndexes.Rows)
                {
                    Console.WriteLine("name:{0}--colName:{1}--Keytype:{2}",
                        row["constraint_name"],row["column_name"],row["KeyType"]);
                }
                Console.ReadLine();

                return PKs;

            }

    2009年3月13日 9:51

答案

全部回复

  • 你好!
         你试试DataTable.PrimaryKey属性:

    private
    void GetPrimaryKeys(DataTable table)
    {
    // Create the array for the columns.
    DataColumn[] columns;
    columns = table.PrimaryKey;

    // Get the number of elements in the array.
    Console.WriteLine("Column Count: " + columns.Length);
    for(int i = 0; i < columns.Length; i++)
    {
    Console.WriteLine(columns[i].ColumnName + columns[i].DataType);
    }
    }

    周雪峰
    2009年3月13日 12:16
    版主
  • 2009年3月13日 21:09
    版主
  • 谢谢,这个方法也想到了,只是想了解一下如何用getschema方法获取主键。
    2009年3月16日 2:26
  • 感谢,这两天查了一些资料,其实手头有一本《Promagmming Microsoft Ado.net 2.0:Advanced Topic一书有一节《〈改和扩充元数据  》对这一问题有简单描述,版主给的资料里也没有直接提供得到主键各列名称等信息,还需要用Constrain-name再查IndexColumns,或者自己定义,有点烦。
    2009年3月16日 3:28
  • 再请教一下蒋版主,NumberOfIdentifierParts是什么意思,应该如何定义
    2009年3月16日 3:48