运输返回打破MySQL BulkLoader

我正在将数据从Visual FoxPro导入到MySQL中,并且在阅读Memo列types时遇到困难。 问题是在FoxPro的备注列中,用户可以input回车符。

我将FoxPro表格加载到一个CSV文件中,并且出现问题,回车被计算为新行,当我使用MySqlBulkLoader时,这些新行会MySqlBulkLoader导入过程。 CSV文件看起来像这样;

 Contact1 Contact2 description associated with Contact2 description associated with Contact2 Contact3 

这里的问题是在Contact2的描述中有回车。 有没有办法,我可以通过CSV文件循环,以便它可以忽略回车,但维护他们在MySQL数据库? 我甚至可以通过C# DataTable循环并在那里删除它们? 所以不要被弄回去,而是把它们保存在MySQL一面。

这些是我目前使用的方法;

  private void Contacts() { using (OleDbConnection dbfCon = new OleDbConnection(dbfConstr)) { dbfCon.Open(); var dbfCmd = new OleDbCommand(@"SELECT ct_id, ct_cmpid, ct_empid, ct_pplid, ct_cntid, ct_pplnm, ct_date, ct_time, ct_type, ct_doneby FROM contacts", dbfCon); var dTable = new DataTable(); var dataAdapter = new OleDbDataAdapter(dbfCmd); dataAdapter.Fill(dTable); WriteDateTimeToCSV(dTable, "contacts"); } } 

将数据从CSV加载到MySQL

  public void WriteDateTimeToCSV(DataTable dataTable, string mySqlTable) { var sb = new StringBuilder(); IEnumerable<string> columnNames = dataTable.Columns.Cast<DataColumn>(). Select(column => column.ColumnName); sb.AppendLine(string.Join(",", columnNames)); Type _datetype = typeof(DateTime); foreach (DataRow row in dataTable.Rows) { IEnumerable<string> fields = row.ItemArray.Select((field, index) => (dataTable.Columns[index].DataType == _datetype) ? ((DateTime)field).ToString("yyyy-MM-dd") : (field.ToString().Contains(",") ? "\"" + field.ToString() + "\"" : field.ToString())); sb.AppendLine(string.Join(",", fields)); } File.WriteAllText(@"C:\Users\DanD\Desktop\test.csv", sb.ToString()); WriteToMySQL(mySqlTable); } 

WriteToMySQL

  public void WriteToMySQL(string mySqlTable) { MySqlConnection mysqlCon = new MySqlConnection(mysqlConstr); mysqlCon.Open(); string tempCsvFileSpec = @"C:\Users\DanD\Desktop\test.csv"; var msbl = new MySqlBulkLoader(mysqlCon); msbl.TableName = "sdcdatabase." + mySqlTable; msbl.NumberOfLinesToSkip = 1; msbl.FileName = tempCsvFileSpec; msbl.FieldTerminator = ","; msbl.FieldQuotationCharacter = '"'; msbl.Load(); File.Delete(tempCsvFileSpec); } 

编辑:这是在Notepad ++中打开的CSV

 32,2199,9,26,0,Dan ,1996-08-13,16:56:12 ,4,Dan ,"OTT 30/08/96. CRLF Test 1 CRLF Test 2 CRLF Test 3 CRLF 33,3146,9,512,0,Dan ,1996-08-20,10:51:14 ,1,Dan ,Call again re Malvern CRLF 

这是我迄今为止所尝试的,以取代CR。

  if (row[10].ToString().Contains("CR")) { row[10].ToString().Replace("CR", "!"); } 

但不幸的是,CR不被取代