gpt4 book ai didi

c# - 将 csv 加载到 oleDB 中并将所有推断的数据类型强制为字符串

转载 作者:太空狗 更新时间:2023-10-29 23:11:44 25 4
gpt4 key购买 nike

我正在尝试使用 oledb 将 csv 文件加载到数据表中。

这没问题,但不幸的是,其中一个看起来是数字的字段在大约 3% 的字段中有一个字符串值,因此没有被填充。

因为我正在将 csv 转换为 xml,所以我真的不关心推断数据类型,只需要字符串中的数据,因为我可以稍后在 Linq2XMl 阶段转换它。

我希望能够在连接字符串中做到这一点。

我不想只复制表格,用我想要的数据类型设置新列,然后将数据写入其中,因为这将涉及加载 csv 文件两次。

有什么想法吗?

我当前的连接字符串是

Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ thefile.DirectoryName + ";Extended Properties='text;HDR=Yes;FMT=Delimited'";

最佳答案

做了一些研究,答案是使用 schema.ini 但为您的数据集动态生成它。

http://msdn.microsoft.com/en-us/library/ms709353(VS.85).aspx

包含所需的信息。构建架构:

   public static void ConstructSchema(FileInfo theFile)
{
StringBuilder schema = new StringBuilder();
DataTable data = LoadCSV(theFile);
schema.AppendLine("[" + theFile.Name + "]");
schema.AppendLine("ColNameHeader=True");
for (int i = 0; i < data.Columns.Count; i++)
{
schema.AppendLine("col" + (i + 1).ToString() + "=" + data.Columns[i].ColumnName + " Text");
}
string schemaFileName = theFile.DirectoryName + @"\Schema.ini";
TextWriter tw = new StreamWriter(schemaFileName);
tw.WriteLine(schema.ToString());
tw.Close();
}

加载csv作为数据表

public static DataTable LoadCSV(FileInfo theFile)
{
string sqlString = "Select * FROM [" + theFile.Name + "];";
string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+ theFile.DirectoryName + ";" + "Extended Properties='text;HDR=YES;'";
DataTable theCSV = new DataTable();

using (OleDbConnection conn = new OleDbConnection(conStr))
{
using (OleDbCommand comm = new OleDbCommand(sqlString, conn))
{
using (OleDbDataAdapter adapter = new OleDbDataAdapter(comm))
{
adapter.Fill(theCSV);
}
}
}
return theCSV;
}

转换成xml

 public static XElement GetXMLFromCSV(FileInfo theFile, string rootNodeName, string itemName)
{
XElement retVal;
DataTable data;
data = CrateCsvAndSchema(theFile);
DataSet ds = new DataSet(rootNodeName);
data.TableName = itemName;
ds.Tables.Add(data);
retVal = XElement.Parse(ds.GetXml());
return retVal;
}

关于c# - 将 csv 加载到 oleDB 中并将所有推断的数据类型强制为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1688497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com