将excel数据导入到SQL

我使用ASP.net来做一些应用程序,但我有一个保留,问题是,用户应该导入Excel文件(文件的模式总是相同的),但在Excel文件中有一堆名称的单元格,看起来喜欢这个

ID Names 1 Mick Jagger Elton John 2 James Hetfield Axl Rose 

等等,所以我有两个或更多的名称每单元格…到目前为止,我将该Excel文件导入到DataSet

 sqlCMD.Connection.Open(); using (OleDbConnection excelConnection = new OleDbConnection(excelConnString)) { using (OleDbCommand cmd = new OleDbCommand("Select " + CompanyID + ", * From [Sheet1$]" , excelConnection)) { OleDbDataAdapter daSheet = new OleDbDataAdapter(cmd.CommandText, excelConnection); DataTable table; table = new DataTable(); daSheet.Fill(table); PreparedData.Tables.Add(table); } } 

所以在成功的导入之后,我有一个导入到数据集中的对象列表,这真是太好了,但是每个单元格的这个2个或多个名字给我带来了麻烦,因为在对象中它的写法就像这个“Mick Jagger \ n Elton John”我试图replace它,并将其添加回数据集(我尝试了新的数据集,但没有成功)

  int Rows = PreparedData.Tables[0].Rows.Count; int Columns = PreparedData.Tables[0].Columns.Count; for (int i = 0; i < Rows; i++) { for (int s = 0; s < Columns; s++) { if (s == 4 || s == 5 || s == 6 || s == 7) { object ValueToReplace; object Replaced; ValueToReplace = PreparedData.Tables[0].Rows[i].ItemArray[s]; Replaced = ValueToReplace.ToString().Replace("\n", ";"); PreparedData.Tables[0].Rows[i].ItemArray[s] = Replaced; } } } 

这一点是,最后我想要导入修改后的数据到我的SQL表中(这是工作)

  SqlBulkCopy bulkcopy = new SqlBulkCopy(sqlCMD.Connection); bulkcopy.DestinationTableName = "Excel_Import"; try { bulkcopy.WriteToServer(FixedData); } catch (Exception e) { } 

那么你能帮我一下,告诉我怎样才能修改它

 PreparedData.Tables[0].Rows[i].ItemArray[s] = Replaced; 

当您引用ItemArray属性时,.NET Framework将在当前行中构build数据的副本。 如果您尝试使用它来设置新值,则您将复印件上的值设置为不在原始行数据上。

这是引用源的ItemArray属性的源代码

  public object[] ItemArray { get { int record = GetDefaultRecord(); _table.recordManager.VerifyRecord(record, this); object[] values = new object[_columns.Count]; for (int i = 0; i < values.Length; i++) { DataColumn column = _columns[i]; VerifyValueFromStorage(column, DataRowVersion.Default, column[record]); values[i] = column[record]; } return values; } 

如您所见,每次引用ItemArray属性时,都会创build一个对象数组的新副本并填充数据。 现在,如果你改变这个数组中的一个条目,你也不会改变DataRow类所维护的内部数据。 DataRow对你的改变根本是未知的。

然而,解决scheme非常简单,只是使用

  ValueToReplace = PreparedData.Tables[0].Rows[i][s].ToString(); PreparedData.Tables[0].Rows[i][s] = ValueToReplace.Replace("\n", ";");