【问题标题】:Importing excel data to SQL将excel数据导入SQL
【发布时间】:2023-04-02 17:55:01
【问题描述】:

我正在使用 ASP.net 制作一些应用程序,但我有一个问题,问题是用户应该导入 excel 文件(文件模式始终相同),但在 excel 文件中有一个包含一堆名称的单元格,看起来像这样

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

等等,所以我每个单元格有 2 个或更多名称...到目前为止,我将该 excel 文件导入数据集

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 ",所以我正在尝试替换它并将其添加回数据集(我尝试制作新数据集但效果不佳)

        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;

【问题讨论】:

    标签: c# sql asp.net excel import


    【解决方案1】:

    当您引用 ItemArray 属性时,NET Framework 会在当前行中构建数据的副本。如果您尝试使用它来设置新值,则您在副本上设置值而不是在原始行数据上。

    这是Reference souceItemArray属性的源代码

        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", ";");
    

    【讨论】:

      猜你喜欢
      • 2018-04-07
      • 2011-09-26
      • 2020-02-27
      • 2015-01-02
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      相关资源
      最近更新 更多