我将一个逗号分隔值文本文件读取并解析为C# 列表有四个字符串。一个字符串的字符串日期格式为:
"20090501 00:00:00.308"
另一个字符串包含类似10.00001的浮点数据类型。
我想使用How to bulk insert into MySQL using C#
中的以下C#代码 var bl = new MySqlBulkLoader(connection);
bl.TableName = "mytable";
bl.FieldTerminator = ",";
bl.LineTerminator = "\r\n";
bl.FileName = "myfileformytable.csv";
bl.NumberOfLinesToSkip = 1;
var inserted = bl.Load();
Debug.Print(inserted + " rows inserted.");
问题是我想将CSV字符串数据类型转换为DECIMAL和DATETIME的正确MySQL数据类型。 我可以使用上面的源代码示例并仍然使用它进行转换吗?如果是这样,怎么办呢。如果没有,我还有 使用SQL一次插入一个并转换每个插入?
答案 0 :(得分:0)
问题是存储在CSV文件中的格式是'dd / MM / yyyy'但是在MySQL中它被格式化为'yyyy / MM / dd'所以我相信这是现在的问题。 你在这里找到了解决方案 https://social.msdn.microsoft.com/Forums/vstudio/en-US/1a280038-4c0f-4fb1-950d-1529269a1c73/issue-with-datetime-format-in-bulkloader-program?forum=csharpgeneral
这是我的新生成csv文件方法:
public static void CreateCSVfile(DataTable dt, string strFilePath)
{
#region Export Grid to CSV
// Create the CSV file to which grid data will be exported.
StreamWriter sw = new StreamWriter(strFilePath, false);
// First we will write the headers.
//DataTable dt = m_dsProducts.Tables[0];
int iColCount = dt.Columns.Count;
for (int i = 0; i < iColCount; i++)
{
sw.Write(dt.Columns[i]);
if (i < iColCount - 1)
{
sw.Write(",");
}
}
sw.Write(sw.NewLine);
// Now write all the rows.
Type _datetype = typeof(DateTime);
foreach (DataRow dr in dt.Rows)
{
for (int i = 0; i < iColCount; i++)
{
if (!Convert.IsDBNull(dr[i]))
{
sw.Write(
dt.Columns[i].DataType == _datetype
? ((DateTime)dr[i]).ToString(CultureInfo.InvariantCulture.DateTimeFormat)
: dr[i].ToString());
}
if (i < iColCount - 1)
{
sw.Write(",");
}
}
sw.Write(sw.NewLine);
}
sw.Close();
#endregion
}