2011-11-29 54 views
3

我有一个逗号分隔值文本文件,并将其解析为C# 带有四个字符串的列表。一个字符串的字符串日期格式为:C#MYSQL MySqlBulkLoader可以即时转换数据类型吗?

"20090501 00:00:00.308" 

另一个字符串包含类似10.00001的float数据类型。

我想从How to bulk insert into MySQL using 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."); 

的问题,使用下面的C#代码是我要的CSV字符串数据类型转换为十进制和DATETIME的正确MySQL的数据类型。 我可以使用上面的源代码示例,并仍使用它进行即时转换吗?如果是这样,那该怎么办。如果没有,我仍然有 使用SQL一次插入一个,并在每个单独的插入上转换?

回答

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 

    }