运输返回打破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不被取代
- 从Repeater导出到Excel?
- 在C#中用密码打开EXCEL(.xlsx)
- 在C#中使用specFlow进行BDDtesting。 从Excel应用程序和WinForms获取input
- 是否需要在服务器上安装MS Excel或Office以读取Web应用程序中的Excel文件?
- 保存Excel到CSVpipe道分隔(XlFileFormat枚举)
- 不规则的System.Data.OleDb.OleDbException(0x80004005):无效的参数问题
- Excel中错误的字体属性
- 如何使用ClosedXml将公式单元格中的文本换行
- 如何将excel导入到datagrid,然后将特定的列保存到mysql数据库