ЗАКАЗАТЬ НА ВСТАВКУ - PullRequest
0 голосов
/ 08 февраля 2012

Я использую OLEDB для вставки в существующую таблицу Excel.Но я хочу вставить в определенном порядке.Итак, у меня есть это:

    File.Copy(lTemplateFolder + lFilename, lDistributorFolder + lFilename, true);
    string lConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + lDistributorFolder + "\\" + lFilename + ";Extended Properties=\"Excel 8.0;HDR=YES;\"";
    DbProviderFactory lFactory = DbProviderFactories.GetFactory("System.Data.OleDb");
    int lSequence = 0;

    using (DbConnection lConnection = lFactory.CreateConnection())
    {
        lConnection.ConnectionString = lConnectionString;
        lConnection.Open();

        foreach (DataRowView rowView in dv)
        {
            DataRow row = rowView.Row;

            lSequence++;

            using (DbCommand lCommand = lConnection.CreateCommand())
            {
                lCommand.CommandText = "INSERT INTO [Sheet1$]";
                lCommand.CommandText += "([First Name],[Last Name],[Title],[Company],[Address],[Address 2],[City],[State],[Zip],[Country],[Work phone],[Email],[Website],[Stamp Time],[Campaign],[Source],[Business Unit],[Market Segment],[Notes]) ";
                lCommand.CommandText += "VALUES(";
                lCommand.CommandText += "\"" + row["name"].ToString().Replace(" ", " ") + "\",";
                lCommand.CommandText += "\"" + row["lastname"].ToString().Replace(" ", " ") + "\",";
                lCommand.CommandText += "\"" + row["title"].ToString().Replace(" ", " ") + "\",";
                lCommand.CommandText += "\"" + row["company"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                lCommand.CommandText += "\"" + row["address"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                lCommand.CommandText += "\"" + row["address2"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                lCommand.CommandText += "\"" + row["city"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                lCommand.CommandText += "\"" + row["state"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                lCommand.CommandText += "\"" + row["zip"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                lCommand.CommandText += "\"" + row["country"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                lCommand.CommandText += "\"" + row["workphone"].ToString() + "\",";
                lCommand.CommandText += "\"" + row["email"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                lCommand.CommandText += "\"" + row["website"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                lCommand.CommandText += "\"" + row["stamptime"].ToString() + "\",";
                lCommand.CommandText += "\"" + row["campaign"].ToString().Replace("\"","\"\"").Replace(" ", " ") + "\",";
                lCommand.CommandText += "\"" + row["source"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";
                lCommand.CommandText += "\"" + row["notes"].ToString().Replace("\"", "\"\"").Replace(" ", " ") + "\",";                    
                lCommand.CommandText += "\"" + "High" + "\"";

            lCommand.CommandText += ")";
            lCommand.ExecuteNonQuery();
            }
        }

        lConnection.Close();
    }

Итак, я хочу взять row["notes"].ToString() и упорядочить вставку по row["notes"].ToString().Count(), чтобы она сначала вставляла самую длинную строку нот, и так далее.Это возможно?Если это так, как бы я поступил так?

Спасибо!

1 Ответ

1 голос
/ 08 февраля 2012

Вы можете вставить в нужном вам порядке, просто загрузив все DataView (из Excel) в список, а затем отсортировать этот список по значению строки ["notes"].

   DataView d = null;//Load from Excel
   var rows = (from DataRowView rowView in d select rowView.Row).ToList();
   foreach (DataRow dataRow in rows.OrderByDescending(r=>(int)r["notes"]))
   {
      //Insert code here that you already have
   }
...