为什么excel自动更改字符? 尝试使用OleDbDataAdapter在c#中读取excel

我正在尝试使用OleDbDataAdapter从Excel中提取数据到数据库SQLite。 但是如下所示,“ – ”符号自动变为方形符号。 实际上,它显示“ – ”在Excel中甚至在SQLite数据库中,但如果我试图search该模型,它不显示。 然后我通过在另一个文本中复制标志正在改变广场,这就是为什么无法search,如果我search“AKAA1-571”。

但是我不明白为什么它会改变? 它显示了一些东西,但实际上是其他东西 我应该如何防止这一点,因为我需要“ – ”而不是其他的东西,以便我可以触发查询search

对不起,我是excel,Unicode,字符的新手。 请帮我一下

谢谢。

在这里输入图像说明

代码: – #地区Excel连接私人stringExcelConnectionOptions(){stringstrOpts =“”; if(this.MixedData == true)strOpts + =“Imex = 1;”; if(this.Headers == true)strOpts + =“HDR = Yes;”; else strOpts + =“HDR = No;”; 返回strOpts; }

private string ExcelConnection() { string provider = @"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=" + _strExcelFilename + ";" + @"Extended Properties=" + Convert.ToChar(34).ToString() + @"Excel 8.0;" + ExcelConnectionOptions() + Convert.ToChar(34).ToString(); return provider; } #endregion 

private bool SetSheetQuerySelect(){try {if(_oleConn == null){throw new Exception(“Connection is unassigned or closed。”); }

  if (_strSheetName.Length == 0) throw new Exception("Sheetname was not assigned."); _oleCmdSelect = new OleDbCommand( @"SELECT * FROM [" + _strSheetName + "$" + "]", _oleConn); return true; } 

公共System.Data.DataTable GetTable(stringstrTableName)

  { try { //Open and query if (_oleConn == null) Open(); if (_oleConn.State != ConnectionState.Open) throw new Exception("Connection cannot open error."); if (SetSheetQuerySelect() == false) return null; //Fill table OleDbDataAdapter oleAdapter = new OleDbDataAdapter(); oleAdapter.SelectCommand = _oleCmdSelect; System.Data.DataTable dt = new System.Data.DataTable(strTableName); oleAdapter.FillSchema(dt, SchemaType.Source); oleAdapter.Fill(dt); 

}

****search后,我发现在Excel文件中,字符属于不同的字体/字符类别。 但看起来相似,所以当我通过OLEDBAdapter读取我想用简单的“ – ”replace这些特殊字符,但对于阅读,我正在使用OLEDbadapter如上,如何使用replacestring? ****

现在您知道发生了什么 – Excel数据不包含简单的减号/短划线,而是包含其他内容(可能是软连字符)。

然后,您可以简单地使用String.Replace交换该列中的数据字符: https : //msdn.microsoft.com/en-us/library/czx8s9ts(v= vs.110).aspx

编辑:

由于您使用的是OleDbDataAdapter,因此您可能需要这些:

https://msdn.microsoft.com/en-us/library/ms180059.aspx(UNICODE和CONVERT函数)

https://msdn.microsoft.com/en-us/library/ms186862.aspx(REPLACE函数)

修改您的SQL语句以将非短划线replace为短划线。

不知何故,我尝试通过使用OLedbadapater首先在Datatable中解决这个获取数据。 然后逐行更改该数据列中的数据。 像下面一样

public DataTable trasnformTable(DataTable dt){DataTable new_dt = dt.Copy(); DataRow dr = new_dt.Rows [0];

  foreach(DataRow row in new_dt.Rows) { string Part_no = dr[0].ToString().Trim(); string replaces_string = Regex.Replace(Part_no, @"[^a-zA-Z0-9\s]+", "-"); dr[0] = replaces_string; } 

返回new_dt; }

从excel中读取时我不知道如何实现这个,因为oledb只是使用select命令直接批量获取Datatable。