OleDbDataAdapter :: Fill не является полными данными ячейки - PullRequest
0 голосов
/ 12 июля 2020

Я читаю данные Excel с помощью OleDbDataAdapter, для этого я использую приведенный ниже код. В моем файле Excel 80 строк и 19 столбцов. Каждый столбец представляет разные языки (например, английский sh арабский c, китайский и др. c). Каждая строка содержит определенные строки.

public DataSet ReadExcelFile(string dataSource)
{
    DataSet ds = new DataSet();
    string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dataSource
                               + " ; Extended Properties='Excel 12.0; IMEX=1'";

    using (OleDbConnection conn = new OleDbConnection(connectionString))
    {
        conn.Open();
        OleDbCommand cmd = new OleDbCommand();
        cmd.Connection = conn;

        // Get all Sheets in Excel File
        DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

        // Loop through all Sheets to get data
        foreach (DataRow dr in dtSheet.Rows)
        {
            string sheetName = dr["TABLE_NAME"].ToString();

            if (!sheetName.EndsWith("$"))
                continue;

            // Get all rows from the Sheet
            cmd.CommandText = "SELECT * FROM [" + sheetName + "]";

            DataTable dt = new DataTable();
            dt.TableName = sheetName;

            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            da.Fill(dt);

            ds.Tables.Add(dt);
        }

        cmd = null;
        conn.Close();
    }

    return ds;
}

Все работает отлично, за исключением нескольких ячеек. для таблицы с несколькими ячейками нет полной строки, это происходит для китайского языка: например, моя строка:

«个性 化 喂养 模式» 允许 您 预置 常用 的 喂养 模式。 一旦 好, 当 按 «模式» 键 时, 它将 自动 出现 喂养 模式 列表 中。

-----------------------------------------------

您 可以 创建, 编辑 或 删除 个性 喂养。。

-----------------------------------------------

提示: 个性 化 喂养 模式 可能 会 被 默认 喂养 列表 隐藏。

-----------------------------------------------

使用 «>» 键 选择 需要 的 喂养 模式。 "

Но я получаю только:

“个性 化 喂养 模式” 允许 您 预置 常用 的 喂养 模式。 设定 好, 当 按 “模式” 键 时, 它将 自动 列表 中。

-----------------------------------------------

您 可以 创建, 编辑 或 删除 个性 化 喂养 模式。

-----------------------------------------------

提示: 个性 化 喂养 模式 可能 会 默认 喂养 列表 隐藏。

-----------------------------------------------

Последняя строка отсутствует. Это происходит только для 3-х ячеек, остальные ячейки поступают правильно.

1 Ответ

0 голосов
/ 13 июля 2020

Кажется, что он усекается до 255 символов.

Согласно этому Microsoft Oledb обрезает длину данных до 255 символов

Когда вы используете Поставщики OLEDB, то тип данных определяется поставщиком автоматически на основе первых 8 строк. Если у вас есть длинные ячейки в первых 8 строках, тогда тип данных будет установлен как текст, в противном случае это будет тип памятки, который может содержать только 255 символов. Чтобы решить эту проблему, либо измените параметр реестра, как указано в статье базы знаний ниже: http://support.microsoft.com/kb/281517, либо воспользуйтесь поставщиком Microsoft.Jet.OLEDB для чтения данных.

Или вы можете попробуйте подход Open Xml. Анализировать и читать большой документ электронной таблицы (Открыть XML SDK)

...