У меня есть следующий код:
con.Open();
string exportQuery = "INSERT INTO OPENROWSET(@oledbType,@filepath,@query)";
string filepath = "'Excel 12.0;Database=C:\\Temp\\TestExcel.xlsx;";
string oledbType = "Microsoft.ACE.OLEDB.12.0";
string query = "SELECT * FROM categoryData";
SqlCommand cmd = new SqlCommand(exportQuery, con);
cmd.Parameters.AddWithValue("@filepath", filepath);
cmd.Parameters.AddWithValue("@oledbType", oledbType);
cmd.Parameters.AddWithValue("@query", query);
cmd.ExecuteNonQuery();
con.Close();
Я получаю сообщение об ошибке:
System.Data.SqlClient.SqlException: «Неверный синтаксис рядом с @oledbType».
Поэтому я думаю, что синтаксис в
string exportQuery = "INSERT INTO OPENROWSET(@oledbType,@filepath,@query)";
это неверно. Любые идеи?
Мне удалось заставить это работать в SQL Server, используя более продвинутую версию предыдущего запроса.
Если файл существует, следующий код правильно экспортирует данные:
INSERT INTO OpenRowSet(
'Microsoft.ACE.OLEDB.12.0'
, 'Excel 12.0;Database=M:\TestExcel.xlsx;'
, 'SELECT * FROM [Sheet1$]'
)
SELECT category as Category, SUM(ButtonClick) as Count FROM
( SELECT COUNT(id) as id, category as category, locationName as location, sum(counter) as ButtonClick FROM categoryData AS t
WHERE locationName IN ('all', 'loc1', 'loc2')
AND date BETWEEN '2018-04-03' AND '2018-04-04'
GROUP BY locationName, category)
AS SUBQUERY GROUP BY category ORDER BY Count ASC
При экспорте в С# я получаю сообщение об ошибке:
string exportQuery = @"INSERT INTO OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=M:\TestExcel.xlsx;' , 'SELECT * FROM [Sheet1$]')
SELECT category as Category, SUM(ButtonClick) as Count FROM
( SELECT COUNT(id) as id, category as category, locationName as location, sum(counter) as ButtonClick FROM categoryData AS t
WHERE locationName IN ('all', 'loc1', 'loc2')
AND date BETWEEN '2018-04-03' AND '2018-04-04'
GROUP BY locationName, category)
AS SUBQUERY GROUP BY category ORDER BY Count ASC";
SqlCommand cmd = new SqlCommand(exportQuery, con);
cmd.ExecuteNonQuery();
Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)" сообщил об ошибке. Провайдер не дал никакой информации об ошибке. Не удается инициализировать объект источника данных поставщика OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)".'
Действительно раздражающая ошибка и ломаю голову над этим. :( :(
opendatasource
вместоopenrowset
: stackoverflow.com/a/29078719/361842 - person JohnLBevan   schedule 13.04.2018