可能重复:
How in .Net do I Import Values from a CSV in the format I want using OleDB?
我有一个csv文件,我使用OleDbCommand读取。
CSV包含的数字是用0填充的数字。 当我读取列时,我得到的结果没有任何前导0字符:现在是一个数字。
CSV中的这些值:
UserNumber LocationNumber
00001234 00023456
00891234 00000456
变为
UserNumber LocationNumber
1234 23456
891234 456
在由OleDbDataAdapter填充的结果数据表中。
有没有办法阻止这种情况?
PS,填充不是问题,但由于工作的性质,并不是一个很好的解决方案,因为CSV文件没有设置格式。
答案 0 :(得分:1)
在我看来,你不会介意将整个文件作为字符串阅读。你可以很容易地构建你的Schema.ini文件。
使用原始连接:
DataTable GetSchemaTable()
{
try
{
OleDbDataAdapter da; // init adapater with your own connection
DataSet ds = new DataSet();
System.Data.DataTable[] dtTables = da.FillSchema(ds, SchemaType.Source);
return dtTables[0];
}
catch (System.Exception se)
{
throw new System.Exception("Problem retrieving Schema: " + se.Message);
}
}
void CreateSchemaIni(string csvDirectory, string csvFileName)
{
DataTable dt = GetSchemaTable();
FileStream fsOutput = new FileStream(csvDirectory + "\\schema.ini", FileMode.Create, FileAccess.Write);
StreamWriter srOutput = new StreamWriter(fsOutput);
string s1, s2, s3;
s1 = "[" + csvFileName + "]";
s2 = "ColNameHeader=False";
s3 = "Format=CSVDelimited";
srOutput.WriteLine(s1 + '\n' + s2 + '\n' + s3 + '\n');
StringBuilder strB = new StringBuilder();
for (int i = 1; i <= dt.Columns.Count; i++)
{
strB.Append("Col" + i.ToString());
strB.Append("=F" + i.ToString());
strB.Append(" Text\n");
srOutput.WriteLine(strB.ToString());
strB = new StringBuilder();
}
srOutput.Close();
fsOutput.Close();
}