使用ODBC文本驱动程序读取第一行

时间:2010-06-29 15:54:47

标签: c# odbc

我有一个使用ODBC读取分隔文件的应用程序。连接字符串如下:

cs = @"Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" + sPath1;

提供文件的公司之一没有使用标题行,我丢失了第一行数据。将HDR=No放在连接字符串中似乎没有帮助。目标目录中有schema.ini

cs = @"Driver={Microsoft Text Driver (*.txt; *.csv)};HDR=No;DBQ=" + sPath1;

阅读第一行的最佳方法是什么?我没有尝试过Excel驱动程序,因为我担心它会以不同的方式解释数据。

2 个答案:

答案 0 :(得分:2)

解决方案是确保有读数

ColNameHeader=False
schema.ini中的

。文档可以在这里找到:

http://msdn.microsoft.com/en-us/library/ms709353%28VS.85%29.aspx

答案 1 :(得分:0)

要遵循正确的答案,您还可以编写一个函数,在运行时以FileStream的形式创建/写入模式文件。写入文件时包括ColNameHeader=False(或将其作为参数传递)。文件名必须为schema.ini

private void writeSchema(string decimalPointOverride = "", string header="True")
{
    try
    {
        FileStream fsOutput = new FileStream( myDirectory + "\\schema.ini", FileMode.Create, FileAccess.Write);
        StreamWriter srOutput = new StreamWriter(fsOutput);
        string s1, s2, s3, s4, s5, s6;

        s1 = "[" + "OutputFileName.CSV" + "]";
        s2 = "ColNameHeader=" + header;  
        s3 = "Format=" + this.strFormat;
        s4 = "MaxScanRows=25";
        s5 = "CharacterSet=" + this.strEncoding;
        //set decimal point if exists, otherwise put empty string ""
        s6 = (decimalPointOverride == "") ? "" : "DecimalSymbol=" + decimalPointOverride + "\r\n";

        srOutput.WriteLine(s1.ToString() + "\r\n" + s2.ToString() + "\r\n" + s3.ToString() + "\r\n" + s4.ToString() + "\r\n" + s5.ToString() + "\r\n" + s6.ToString());
        srOutput.Close();
        fsOutput.Close();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message, "writeSchema");
    }

}