Используя временную таблицу в c#

Вам нужно сделать два COUNTIF и один COUNTIFS:

=COUNTIF(A:A,"<>")+COUNTIF(B:B,"<>")-COUNTIFS(A:A,"<>",B:B,"<>")

Или вам нужно ограничить диапазон данных, чтобы использовать SUMPRODUCT:

=SUMPRODUCT(--((A1:A1000<>"")+(B1:B1000<>"")>0))
7
задан Grace Note 11 May 2010 в 16:06
поделиться

5 ответов

Измените свою временную таблицу от #table до ##table в обоих местах.

Используя средства ## глобальная временная таблица, которая остается вокруг. Необходимо будет Отбросить его после того, как Вы выполните свою задачу.

Команда = "таблица отбрасывания ##table"

7
ответ дан 6 December 2019 в 15:37
поделиться

Я не думаю, что можно сделать временную таблицу в SQL путем, Вы думаете, так как он только существует в рамках запроса/хранимой процедуры, который создает его.

Если бы электронная таблица является стандартным форматом - значение, что Вы знаете столбцы, и они всегда - то же, Вы хотели бы составить Таблицу в SQL для помещения этого файла в. Существует очень быстрый способ сделать названный SqlBulkCopy

// Load the reports in bulk
SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString);
// Map the columns
foreach(DataColumn col in dataTable.Columns)
   bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
bulkCopy.DestinationTableName = "SQLTempTable";
bulkCopy.WriteToServer(dataTable);

Но, если я понимаю Вашу проблему правильно, Вы не должны использовать SQL-сервер для изменения данных в DataTable. Вы c использование Реактивный двигатель для захвата данных для Вас.

    // For CSV
    connStr = string.Format("Provider=Microsoft.JET.OLEDB.4.0;Data Source={0};Extended Properties='Text;HDR=Yes;FMT=Delimited;IMEX=1'", Folder);
    cmdStr = string.Format("SELECT * FROM [{0}]", FileName);
    // For XLS
    connStr = string.Format("Provider=Microsoft.JET.OLEDB.4.0;Data Source={0}{1};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'", Folder, FileName);
    cmdStr = "select * from [Sheet1$]";
OleDbConnection oConn = new OleDbConnection(connStr);
            OleDbCommand cmd = new OleDbCommand(cmdStr, oConn);
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            oConn.Open();
            da.Fill(dataTable);
            oConn.Close();

Кроме того, в Вашем коде Вы спрашиваете, корректна ли Ваша строка подключения. Я не думаю, что это (но я мог быть неправым). Если Ваш не работает, пробуют это.

connectionString="Data Source=localhost\<instance>;database=<yourDataBase>;Integrated Security=SSPI" providerName="System.Data.SqlClient"
3
ответ дан 6 December 2019 в 15:37
поделиться

Помещение данных в базу данных займет время - так как у Вас уже есть он в памяти, возможно, LINQ к объектам (с DataSetExtensions) является Вашим другом? Замена <интервал> и т.д. с корректными типами...

        var query = from row in table.Rows.Cast<DataRow>()
                  group row by new
                  {
                      Col1 = row.Field<int>(1),
                      Col2 = row.Field<int>(2)
                  } into grp
                  select new
                  {
                      Col1 = grp.Key.Col1,
                      Col2 = grp.Key.Col2,
                      SumCol7 = grp.Sum(x => x.Field<int>(7))
                  };
        foreach (var item in query)
        {
            Console.WriteLine("{0},{1}: {2}",
                item.Col1, item.Col2, item.SumCol7);
        }
4
ответ дан 6 December 2019 в 15:37
поделиться

Простите мне, если я не понял то, что Вы точно хотите.
Если Вы хотите выполнить SQL-запрос на листе Excel, Вы могли бы сделать это непосредственно.

С другой стороны, можно использовать SQL Server для запросов Excel (OpenRowset или функция, которую я не помню сразу же). Используя это, можно присоединиться к таблице SQL-сервера с листом Excel

Предложение Marc является еще одним способом посмотреть на него.

0
ответ дан 6 December 2019 в 15:37
поделиться

Возможно, Вы могли использовать DataView. Вы создаете это из DataTable, который Вы уже имеете.

dv = new DataView(dataTableName);

Затем можно отфильтровать (примените оператор Where SQL), или отсортируйте данные с помощью методов DataView. Можно также использовать, Находят, чтобы найти, что строка соответствия или FindRows находит все строки соответствия.

Некоторые фильтры:

dv.RowFilter = "Country = 'USA'";
dv.RowFilter = "EmployeeID >5 AND Birthdate < #1/31/82#"
dv.RowFilter = "Description LIKE '*product*'"
dv.RowFilter = "employeeID IN (2,4,5)"

Сортировка:

dv.Sort = "City"

Нахождение строки: Найдите клиента по имени "John Smith".

   vals(0)= "John"
   vals(1) = "Smith"
   i = dv.Find(vals)

где я - индекс строки, содержащей клиента.

После того как Вы применили их к DataView, можно связать сетку с DataView.

0
ответ дан 6 December 2019 в 15:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: