在我的CSV文件里,有一列叫做period,这一列的数据格式如下:MM/dd/yyyy然后我写了一个winform去读取,
oleDbCon.ConnectionString = @"Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " + dataSource + "\\" + ";Extended Properties = 'Text;FMT=Delimited;HDR=YES;'";
            oleDbCon.Open();
            oleDbCom.Connection = oleDbCon;            StringBuilder sbSQL = new StringBuilder();
            sbSQL.Append("select [Description],[COA],[Dr],[Cr],[Currency],[period],[Voucher No],[Foreign Dr],[Foreign Cr],[Voucher Title],[Company] from [" + debtCreditModel.ReportSourceFileName + "] where 1 = 1");然后DataSet的table直接赋给了一个DataGridView,期间不做任何数据的操作。
现在的问题是:如果period的日期是这样的,比如9/3/2009,或者9/12/2009,或者9/1/2009,9/24/2009,9/30/2009。格式是MM/dd/yyyy
我把返回的DataSet的Table赋值给了一个DataGridView,然后直接显示出来。
Period的格式似乎是dd/MM/yyyy,那么很显然9/30/2009是不符合规范的,因为照它的理解,不可能有30月9号这个概念。
我怎么强制csv的格式是MM/dd/yyyy。
这不是SQL,SQL可以有函数convert(nvarchar(100),getdate(),101)来强制输出的是MM/dd/yyyy。
oledb不支持该函数,或者谁可以给我数据库正确的连接代码,我可以改一下DAL层。

解决方案 »

  1.   

    再Format也没用,数据库查找出来以后,格式已经错掉了,格式9/30/2009已经无法查找到了,我可能需要改变一下数据库链接方式,不用oledb,有没有谁有正确的连接代码。
    我不想google了,还要调试,没时间了~~~。
      

  2.   

    我操作CSV文件都是以文本流的方式实现的,从来不用你这种方式,
    根据我的经验,建议你也别用;
    你这种方式一方面是格式不好控制;另一方面是当数据很大,比如几十K甚至上兆的时候,速度会很慢的
      

  3.   

    你可以用tab符号来分隔;或者用|;
    我都一直用这种方式读写,有需要处理的格式,在读取的时候就处理了;
    最后做成一个库,以后使用起来也方便很多
      

  4.   

    其实我也想啊,可惜是其它软件倒出来的csv,我已经没办法改变原数据了。
      

  5.   

    那你可以对读取来的数据做下处理,先转换为datetime格式,然后再转换为你想要的时间格式;
    或者你自己定义一个函数,把这个时间格式转换过来,然后给绑定控件
      

  6.   

    问题的关键就在于这里,我的数据是形式如MM/dd/yyyy的格式的。
    但是它解析的时候似乎是按照dd/MM/yyyy来解析的,
    那么自然9/30/2009这样的日期就无法识别了,或者说识别错误。
    于是有些日期我就根本拿不出来的。是空白(不报错因为我自己抓到异常了。DateTime.Parse()的FormatException)。
      

  7.   

    你用excel打开CSV文件,看下日期那个字段列的格式是否可以设置下,能否起作用;
    或者你把日期那个字段定义为字符串格式,这样就肯定没事了,不要按照日期来处理,按照字符串来处理
      

  8.   

    唉,之前就是用String类型做过的,不行才换DateTime的,改了还是不行,彻底没想法了
    还有排序啊,根据某个数字类型排序,可惜CSV全部认为是字符串类型的,所以1,2,3,4,5,6,10,11,21,23,31,33就顺序不对了。。
    我在我的DataTable里面再排序,也还是不行。我的神啊。。
    报表上有什么东西可以支持字符串转数字再排序伐~~~
      

  9.   

    我也试过在DataTable里排序的,但是也不知道怎么让他认为那是数字而不是字符串,就算我的XSD的类型已经是int32了,它的排序也还是照着字符串排序的。
    非常感谢你的回复。
      

  10.   

    你可以把数据放在缓冲里,排序好后重新绑定grid控件