首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将混合数据的列转换为字符串

将混合数据的列转换为字符串
EN

Stack Overflow用户
提问于 2020-01-23 13:14:24
回答 1查看 702关注 0票数 1

我有一个excel文件与1列,列包含混合数据,int & string。

在从excel文件中读取数据之后,我看到带有数据AZ-965的单元格为null。这是我的字符串连接

代码语言:javascript
复制
return new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
                                   + excel + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0;';");

我就是这样从Excel文件中读取数据的

代码语言:javascript
复制
private static List<T> GetImportedData<T>(string sheet, OleDbConnection myConnection,
        List<string> column, ImportDataView<T> view) where T : IImportableData
    {
        var cols = string.Join( ",", column.Select(Cast));
        var formattableString = $"select {cols} from [{sheet}$]";
        using (var MyCommand = new 
            OleDbDataAdapter(formattableString, myConnection))
        {
            using (var DtSet = new DataSet())
            {
                int nbRow = 0;
                MyCommand.Fill(DtSet);
                var dt = DtSet.Tables[0];
                var rows = dt.AsEnumerable();
                var convertedList = rows
                    //.AsParallel()
                    .Select(x => GenerateImport<T>(x, column, ref nbRow, view))
                    .ToList();
                return convertedList;
            }
        }
    }

    private static string Cast(string arg)
    {
      return $"IIf(IsNull([{arg}]), '', CStr([{arg}]))";
     // return $"CStr([{arg}]) as {cleanName(arg)}";
     //return $"[{arg}]";
    }

我检查了这个link,但是没有什么是工作的,是一样的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-25 02:34:36

连接字符串中的TypeGuessRows不是连接字符串属性,至少我不知道。这是一个注册表项:

https://learn.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/initializing-the-microsoft-excel-driver?tabs=office-2016

所以我不认为它做的是你想的那样.或者其他任何事情。

如果无法控制注册表或文件的内容,我唯一的建议是将连接字符串(HDR=YES)中的头属性更改为"no“,以便将第一个记录以文本形式读取.然后,您可以有效地垃圾第一行。

这不是一个很好的解决方案,但它应该做你想要的。

或者,您可以尝试使用DbDataReader来读取内容,而不是使用数据适配器:

代码语言:javascript
复制
using (OleDbCommand cmd = new OleDbCommand(formattableString, conn))
{
    using (OleDbDataReader reader = cmd.ExecuteReader())
    {
        string column = reader.IsDBNull(0) ? null : reader.GetValue(0).ToString();
    }
}

根据我对您所要做的工作的推断,数据读取器实际上也可能提供其他一些优势。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59879453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档