Массовая вставка OLEDB и C # для создания электронных таблиц Excel - PullRequest
1 голос
/ 30 августа 2011

Я использую C # для чтения хранимой процедуры SQL, помещаю результаты хранимой процедуры в таблицу данных C #, а затем читаю таблицу данных построчно, чтобы создать мой «Вставить в .... значения» и т. Д.Это создает мою таблицу Excel с правильными данными.Однако, вместо вставки строка за строкой, есть ли способ сделать массовую вставку?

В противном случае я думал о том, чтобы получить хранимую процедуру для записи результатов в постоянную таблицу и, следовательно, есть способ сделать «Вставить в .... выберите из».Когда я попробовал это в C #, код не может найти имя таблицы SQL, указанное «Механизм доступа к базе данных Microsoft не может найти объект», каков правильный синтаксис и где вы указываете, где / как получить доступ к таблице SQL?

Спасибо


Привет, эта ссылка выглядит так, как будто она использует Microsoft.Office.Interop.Excel;Я использую OLEDB (о чем я сейчас и жалею!).Так что в основном у меня есть класс C #, который вызывается из другого компонента.Этот класс C # читает хранимую процедуру sql, помещает результаты в таблицу данных.Затем я настраиваю определение таблицы, используя команду OLEDB «Вставить в ([]) значения («? »). Затем я определяю параметры, например, cmd.Parameters.Add (columnHeading, OleDbType.VarChar, size) и т. Д. Затем для каждой строкия нахожу в таблице данных, я устанавливаю cmd.Parameters [i] .value = row [i], где параметры [i] увеличивается для каждого столбца в этой строке. Затем я зацикливаюсь для каждой строки данных и устанавливаю cmd.Parameters[i] .value соответственно. Так как я должен установить cmd.Parameters [i] .Value для каждой строки, которую я нахожу в моем наборе данных, а затем cmd.ExecuteNonQuery ();, это довольно много времени. Так есть способМассовая вставка данных из таблицы данных в команду OLEDB, если нет, могу ли я вставить данные, ссылаясь непосредственно на таблицу SQL и выполнив «вставку в ... выбор из»?

1 Ответ

0 голосов
/ 30 августа 2011

Вы можете разделить операторы вставки точкой с запятой и запустить всего 1 команду.Например ...

string sql = "insert into table (col1,col2) values ('row1','row1');"
sql += "insert into table (col1,col2) values ('row2','row2');"
sql += "insert into table (col1,col2) values ('row3','row3');"
SqlConnection conn = new SqlConnection("some connection string");
SqlCommand cmd = new SqlCommand(sql, conn);
conn.Open();
conn.ExecuteNonQuery();
conn.Dispose();
cmd.Dispose();

Или что-то подобное.Вы выполняете все 3 запроса с помощью 1 команды.Это может не работать с базами данных, отличными от SQL Server, но определенно будет работать с SQL Server.

...