簡體   English   中英

C#OdbcDataReader或DataTable.Load列名稱問題

[英]C# OdbcDataReader or DataTable.Load column name issue

我很高興為我的應用程序編寫代碼,面對這個讓我有些害怕的問題。

我有一個SQLite db文件,當我嘗試使用OdcbDataReader讀取表並使用DataTable.Load加載到表中時,根據正在使用的應用程序,列名會得到不同的結果。

有時它返回table_name.column_name,有時它僅返回column_name。

代碼只是這樣:

    public DataTable GetTable(string table_name)
    {
        table = null;
        if (conn_str != null)
        {
            try
            {
                using (OdbcConnection conn = new OdbcConnection(conn_str.ToString()))
                {

                    StringBuilder query = new StringBuilder();

                    query.Append("SELECT * ");
                    query.Append("FROM [");
                    query.Append(table_name + "]");

                    using (OdbcCommand cmd = new OdbcCommand(query.ToString(), conn))
                    {
                        conn.Open();
                        table = new DataTable();
                        using (OdbcDataReader dr = cmd.ExecuteReader())
                        {
                            DataSet ds = new DataSet();
                            ds.EnforceConstraints = false;
                            ds.Tables.Add(table);
                            table.Load(dr);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.Print(ex.Message);
                table = null;
            }
        }
        return table;
    }

使用的連接字符串完全相同:

“ DRIVER = {SQLite3 ODBC驅動程序}; DATABASE = databesename.db3;”

任何想法為什么會這樣?

無法解決問題,但至少可以提供解決方法。

如果Reader插入了table_name,則在列名上添加一個替換以刪除table_name。

foreach (DataColumn col in table.Columns)
{
    //Fix column names if the Reader insert the table name into the ColumnName
    col.ColumnName = col.ColumnName.Replace(table_name + ".", "");
}

代碼更改后:

public DataTable GetTable(string table_name)
{
    table = null;
    if (conn_str != null)
    {
        try
        {
            using (OdbcConnection conn = new OdbcConnection(conn_str.ToString()))
            {
                StringBuilder query = new StringBuilder();

                query.Append("SELECT * ");
                query.Append("FROM [");
                query.Append(table_name + "]");

                using (OdbcCommand cmd = new OdbcCommand(query.ToString(), conn))
                {
                    conn.Open();
                    table = new DataTable();
                    using (OdbcDataReader dr = cmd.ExecuteReader())
                    {
                        DataSet ds = new DataSet();
                        ds.EnforceConstraints = false;
                        ds.Tables.Add(table);
                        table.Load(dr);
                        foreach (DataColumn col in table.Columns)
                        {
                            //Fix column names if the Reader insert the table name into the ColumnName
                            col.ColumnName = col.ColumnName.Replace(table_name + ".", "");
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Debug.Print(ex.Message);
            table = null;
        }
    }
    return table;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM