Я пытаюсь использовать OleDB с помощью Text Driver в PowerShell для более простого управления большим CSV.
Все работает, и я могу запросить данные. Проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь выполнить запрос к таблице данных несколько раз.
Пример:
- Первый запрос: я запрашиваю таблицу, чтобы получить счетчик для столбца 1, который производит 100.
- Второй запрос: я запрашиваю таблицу, чтобы указать число в другом столбце, и получаю те же 100 из первого запроса.
Трудно понять, как очистить данные из первого запроса, чтобы возвращались новые результаты.
$conn = New-Object System.Data.OleDb.OleDbconnection
$conn.ConnectionString = $connstring
$conn.Open()
$cmd = New-Object System.Data.OleDB.OleDBCommand
$cmd.Connection = $conn
$checkColumns = "Name, Age"
$data_group_check = "SELECT $checkColumns, COUNT(*) as DupeCount FROM [$tablename] GROUP BY $checkColumns HAVING COUNT(*) > 1"
$data_online_check = "SELECT $checkColumns, COUNT(*) as DupeCount FROM [$tablename] WHERE Online LIKE 'yes' GROUP BY $checkColumns HAVING COUNT(*) > 1"
$data_offline_check = "SELECT $checkColumns, COUNT(*) as DupeCount FROM [$tablename] WHERE Online LIKE 'no' GROUP BY $checkColumns HAVING COUNT(*) > 1"
$dt = New-Object System.Data.DataTable
$cmd.CommandText = $data_group_check
$dt.BeginLoadData()
# First Query
$dt.Load($cmd.ExecuteReader([System.Data.CommandBehavior]::Default))
$dupecount = $dt.Rows.Count
# Start Second Query
$cmd.CommandText = $data_online_check
$dt.Load($cmd.ExecuteReader([System.Data.CommandBehavior]::Default))
$online_dupes = $dt.Rows.Count
# Start Third Query
$cmd.CommandText = $data_offline_check
$dt.Load($cmd.ExecuteReader([System.Data.CommandBehavior]::CloseConnection))
$offline_dupes = $dt.Rows.Count
$dt.EndLoadData()
$totaltime = [math]::Round($elapsed.Elapsed.TotalSeconds,2)
# Get Total Row Count
$conn.Open()
$cmd.CommandText = "SELECT COUNT(*) as TotalRows FROM [$tablename]"
$totalrows = $cmd.ExecuteScalar()
$conn.Close()
$totalrows
$dupecount
$online_dupes
$offline_dupes
$totaltime
- $ totalrows - Производит 1500000
- $ dupecount - Производит 15000
- $ online_dupes - Производит 15000 (должно быть 2002)
- $ offline_dupes - производит 15000 (должно быть 3040)
Если я запускаю каждый запрос отдельно, я получаю правильные числа.
Между первым и вторым / третьим запросом есть что-то, что мне нужно очистить?