导入excel数据到SQL
问题描述:
我使用ASP.net来制作一些应用程序,但我有一个问题,问题在于用户应该导入excel文件(文件模式总是相同),但在excel文件中有一个细胞与一堆名字,看起来像这样导入excel数据到SQL
ID Names
1 Mick Jagger
Elton John
2 James Hetfield
Axl Rose
等等,所以我必须每单元2名或更多的名字......到目前为止,我进口的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埃尔顿约翰”,所以我试图取代它,并将其添加回数据集(我试图创建新的数据集,但没有成功)
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将在当前行中构建数据的副本。如果您尝试使用它来设置新值,则可以将副本上的值设置为不在原始行数据上。
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
属性的源代码正如你可以看到,在每次参考创建的对象阵列的一个新的副本,并填充有数据的ItemArray属性的时间。现在,如果更改此数组中的条目,您也不会更改由DataRow类维护的内部数据。 DataRow对您的更改根本未知。
但是该解决方案是非常简单,只需使用
ValueToReplace = PreparedData.Tables[0].Rows[i][s].ToString();
PreparedData.Tables[0].Rows[i][s] = ValueToReplace.Replace("\n", ";");
谢谢你的男人......你帮我,这就像魅力! – Veljko89