C#MYSQL MySqlBulkLoader可以动态转换数据类型吗?

时间:2011-11-29 19:34:29

标签: c# mysql csv

我将一个逗号分隔值文本文件读取并解析为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一次插入一个并转换每个插入?

1 个答案:

答案 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

    }