[英]Importing excel data to SQL
我正在使用ASP.net制作一些應用程序,但是我遇到了麻煩,問題是用戶應該導入excel文件(文件的樣式始終相同),但是在excel文件中有一個帶有一堆名稱的單元格,看起來像這樣
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);
}
}
因此,在成功導入之后,我將導入到數據集中的對象列表很棒,但是每個單元格中有兩個或兩個以上的名稱給我帶來了麻煩,因為在對象值中這樣寫:“ Mick Jagger \\ n Elton John”,所以我正在嘗試替換它,並將其添加回數據集(我嘗試制作新的數據集,但效果不佳)
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框架將在當前行中構建數據的副本。 如果嘗試使用它來設置新值,請在副本上而不是在原始行數據上設置值。
這是Reference源中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屬性時,都會創建一個對象數組的新副本並填充數據。 現在,即使您更改此數組中的條目,也不會更改DataRow類維護的內部數據。 您所做的更改對於DataRow來說根本是未知的。
但是解決方案非常簡單,只需使用
ValueToReplace = PreparedData.Tables[0].Rows[i][s].ToString();
PreparedData.Tables[0].Rows[i][s] = ValueToReplace.Replace("\n", ";");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.