Check if column exists in OleDb table

半世苍凉 提交于 2019-11-28 05:46:25

问题


I am trying to check if a column exists and if not, add it. I've tried a couple of solutions including this, but the syntax isn't correct for Access db.

This is what I have so far:

    public void Update(string task, string dbPath, string tableName = "Frames")
    {
        OleDbConnection db = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;data source=" + dbPath);
        db.Open();

        OleDbCommand command = db.CreateCommand();
        command.CommandText = "COL_LENGTH('Frames','SetNumber')";
        Debug.WriteLine(command.ExecuteReader());




        /*
        string[] restrictions = new string[] {null, null, tableName};

        DataTable dtColumns = db.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, restrictions);

        foreach (DataColumn column in dtColumns.Columns)
        {
            Debug.WriteLine(column.ColumnName);
        }*/

    }

I also tried using GetOleDbSchemaTable but it isn't returning the right table or something. What am I missing?


回答1:


To check if a column exist in a datatable you could use the GetSchema method of the OleDbConnection

public void Update(string task, string dbPath, string colName, string tableName = "Frames") 
{ 
    using(OleDbConnection db = new OleDbConnection("........"))
    {
        db.Open(); 
        var schema = db.GetSchema("COLUMNS"); 
        var col = schema.Select("TABLE_NAME='" + tableName + 
                   " AND COLUMN_NAME='" + colName + "'" 

        if(col.Length > 0)
           // Column exist
        else
           // Column doesn't exist
} 



回答2:


Your approach with GetOleDbSchemaTable is the way to go. Each row of the schema table contains the information for a single column of your table and each column of the schema table represents one property of it. So, loop through the rows of the schema table, not the columns!

foreach (DataRow row in dtColumns.Rows) { // <== dtColumns.Rows
                                          //     (NOT dtColumns.Columns)
    string columnName = (string)row["COLUMN_NAME"];
    ....
}

Your approach yields the column names of the schema table itself.



来源:https://stackoverflow.com/questions/12148745/check-if-column-exists-in-oledb-table

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!