簡體   English   中英

無法使用OdbcDataReader加載DataTable

[英]Cannot load DataTable with OdbcDataReader

我有一個運行在ODBC上的C-Tree數據庫查詢,如下所示:

SELECT id, CONCAT(TO_CHAR(first_visit_date, 'YYYY-MM-DD '), 
TO_CHAR('00:00:00', 'HH24')) AS date_first_visit FROM admin.v_patient

返回如下結果:

1, 2015-03-07 00:00:00  
2, 2016-01-27 00:00:00

當然,完整的查詢要大得多,但這是唯一給我帶來麻煩的字段。 當我嘗試使用此方法加載數據時:

using (OdbcConnection conn = new OdbcConnection(connectionString))
{
    conn.Open();

    using (OdbcCommand com = new OdbcCommand(cmdText, conn))
    {
        using (OdbcDataReader reader = com.ExecuteReader())
        {
            var rawData = new DataTable();
            rawData.Load(reader);
        }
    }
}

我收到以下錯誤:

An exception of type 'System.Data.ConstraintException' occurred in System.Data.dll but was not handled in user code
Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

我嘗試將查詢更新為

SELECT id, '2015-03-07 00:00:00 ' AS date_first_visit 
FROM admin.v_patient

可行...應該是完全一樣的東西,除了現在每一行都有相同的日期。 對於咧嘴笑,我嘗試使用以下方法將其轉換為varchar:

CONVERT('VARCHAR', TO_CHAR(first_visit_date, \'YYYY-MM-DD 00:00:00\') )

和其他方式,但真正的麻煩似乎是在加載DataTable,但我無法弄清楚查詢結果之間的區別,或者在我的示例中僅指定一個字符串的結果之間會有什么區別。

我沒有在表上定義任何約束,這似乎消除了non-null, or foreign-key constraints ,並且由於我可以在每一行中重復使用同一日期,因此似乎消除了unique ,我想知道到底是怎么了。

使用以下代碼替換rawData.Load(reader)可以解決此問題:

DataTable dtSchema = reader.GetSchemaTable();
List<DataColumn> listCols = new List<DataColumn>();
var rawData = new DataTable();
if (dtSchema != null)
{
    foreach (DataRow drow in dtSchema.Rows)
    {
        string columnName = System.Convert.ToString(drow["ColumnName"]);
        DataColumn column = new DataColumn(columnName, (Type)(drow["DataType"]));
        column.Unique = false;
        column.AllowDBNull = true;
        column.AutoIncrement = false;

        listCols.Add(column);
        rawData.Columns.Add(column);
    }
}
while (reader.Read())
{
    DataRow dataRow = rawData.NewRow();
    for (int i = 0; i < listCols.Count; i++)
    {
        dataRow[((DataColumn)listCols[i])] = reader[i];
    }
    rawData.Rows.Add(dataRow);
}

暫無
暫無

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

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