Peter
Peter

Reputation: 49008

How to get the primary key of an Ms Access table in C#

I need the field or fields (just the name of the field will do) that form the primary key of a Microsoft Access Table, given a connection and a tableName.

Upvotes: 1

Views: 5466

Answers (1)

Peter
Peter

Reputation: 49008

ok, I guess I found it. It should work for all oledb and is sth. like :

public static List<string> getKeyNames(String tableName, DbConnection conn)
    {
        var returnList = new List<string>();


        DataTable mySchema = (conn as OleDbConnection).
            GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys,
                                new Object[] {null, null, tableName});


        // following is a lengthy form of the number '3' :-)
        int columnOrdinalForName = mySchema.Columns["COLUMN_NAME"].Ordinal;

        foreach (DataRow r in mySchema.Rows)
        {
            returnList.Add(r.ItemArray[columnOrdinalForName].ToString());
        }

        return returnList;
    }

Upvotes: 6

Related Questions