C# OLEDB数据读取器十进制问题

C# OLEDB数据读取器十进制问题,c#,decimal,comma,oledbdatareader,C#,Decimal,Comma,Oledbdatareader,我有一个以制表符分隔的文本文件,其中一些十进制值的格式如下:0,12(逗号作为十进制分隔符)。 我通过Provider=Microsoft.Jet.OLEDB.4.0将其内容解析为OleDBDataReader,但是当我查看结果时,应该是十进制的值被转换为DateTime 如何“强制”我的应用程序将逗号理解为数字的十进制分隔符? 无法将cultureinfo更改为en US或其他任何版本 public static OleDbDataReader CriarOleDbDataReader(str

我有一个以制表符分隔的文本文件,其中一些十进制值的格式如下:0,12(逗号作为十进制分隔符)。 我通过Provider=Microsoft.Jet.OLEDB.4.0将其内容解析为OleDBDataReader,但是当我查看结果时,应该是十进制的值被转换为DateTime

如何“强制”我的应用程序将逗号理解为数字的十进制分隔符? 无法将cultureinfo更改为en US或其他任何版本

public static OleDbDataReader CriarOleDbDataReader(string sCaminhoArquivo)
    {
        FileInfo fi = new FileInfo(sCaminhoArquivo);

        string format;

        string linha;

        if (fi.Extension.ToLower().Equals(".csv"))
        {
            string texto = System.IO.File.ReadAllText(sCaminhoArquivo).Replace(',', ';');
            System.IO.File.WriteAllText(sCaminhoArquivo, texto);
            linha = System.IO.File.ReadAllLines(sCaminhoArquivo)[0];
            format = "Delimited(;)";
        }
        else
        {                
            linha = System.IO.File.ReadAllLines(sCaminhoArquivo)[0];
            format = (linha.Split('\t').Count() > 1) ? "TabDelimited" : "Delimited(;)";
        }

        DefinirSchema(fi, format);

        string cn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fi.DirectoryName + ";Extended Properties='text;HDR=Yes';";

        OleDbConnection con = new OleDbConnection(cn);
        OleDbCommand cmd = new OleDbCommand("select * from [" + fi.Name + "]", con);
        OleDbDataReader dr;

        con.Open();

        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

        return dr;

    }
字段“IOF”是一个十进制数,其在.txt文件中的值为0,02,但返回datetime

dr["iof"]
{30/12/1899 00:02:00}
    Date: {30/12/1899 00:00:00}
    Day: 30
    DayOfWeek: Saturday
    DayOfYear: 364
    Hour: 0
    Kind: Unspecified
    Millisecond: 0
    Minute: 2
    Month: 12
    Second: 0
    Ticks: 599264353200000000
    TimeOfDay: {00:02:00}
    Year: 1899
如何“强制”我的应用程序将逗号理解为数字的十进制分隔符

上面的代码生成十进制值0.02。

如何“强制”我的应用程序将逗号理解为数字的十进制分隔符

上述代码生成十进制值0.02。

您需要其中一个

一,

Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture(“小数点以逗号分隔而非点的任何区域性”)

2. 如果你在美国文化中

这是伪代码,不是精确的语法

decimal.Parse("0,02").Split(",").Join("."))
三,

您的文件以制表符分隔。使用stream将其加载到datatable中,而不是使用OleDb

一,

Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture(“小数点以逗号分隔而非点的任何区域性”)

2. 如果你在美国文化中

这是伪代码,不是精确的语法

decimal.Parse("0,02").Split(",").Join("."))
三,

您的文件以制表符分隔。使用流将其加载到datatable中,而不是使用OleDb

刚刚解决了它。 我不得不在schema.ini文件中添加更多的行,该文件试图为文件中的每一列确定de数据类型。明白了

这两个婴儿成功了:

ColNameHeader=True

MaxScanRows=0

希望有帮助。

刚刚解决了这个问题。 我不得不在schema.ini文件中添加更多的行,该文件试图为文件中的每一列确定de数据类型。明白了

这两个婴儿成功了:

ColNameHeader=True

MaxScanRows=0


希望有帮助。

好的,但我不想在de datareader充满数据后转换。我想让它在executereader中填入正确的值。然后,您需要执行如下操作,而不是
select*
select functionConvertToDecimal(decimalField),另一个字段。。。From…
Ok,但我不想在de datareader充满数据后进行转换。我想让它在executereader中填入正确的值。然后,您需要执行如下操作,而不是
select*
select functionConvertToDecimal(decimalField),另一个字段。。。从…
1-不起作用。2-如前所述,值必须以正确的格式返回,因此,延迟转换将被丢弃。3-Datatable是最初的解决方案,正在运行(性能糟糕)。但是当文件超过300000行时,它抛出了一个“OutOfMemoryException”,因此,datatable被丢弃。请重新阅读。消息没有显示出来。您是否设置了逗号作为小数分隔符的区域性?您可以创建一个服务并将文件加载到Sql Server,然后从该服务开始工作1-未工作。2-如前所述,值必须以正确的格式返回,因此,延迟转换将被丢弃。3-Datatable是最初的解决方案,正在运行(性能糟糕)。但是当文件超过300000行时,它抛出了一个“OutOfMemoryException”,因此,datatable被丢弃。请重新阅读。消息没有显示出来。您是否设置了逗号作为小数分隔符的区域性?您可以创建一个服务并将文件加载到Sql Server,然后从那里开始工作