2015-02-11 4 views
-4

Для моей стажировки я должен выполнить некоторые SQL-запросы.как выполнить много запросов за один раз

Я стараюсь это трансферт данные из файла CSV в базу данных SQL-сервера

string str = Path.GetFullPath("."); 
    String conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=""Text;HDR=No;FMT=Delimited"";Data Source="+str+""; 
    string strCnx = "Database=" + ConfigurationManager.AppSettings["base"] + ";data source=" + ConfigurationManager.AppSettings["servername"] + ";User Id=" + ConfigurationManager.AppSettings["user"] + ";Password=" + ConfigurationManager.AppSettings["password"] + ";Connect Timeout=10"; 
    // Open a sourceConnection to the AdventureWorks database. 
    //using (OleDbConnection sourceConnection = new OleDbConnection(strCnx)) 
    { 
     //sourceConnection.Open(); 

     // Get data from the source table as a SqlDataReader. 
     OleDbConnection cn = new OleDbConnection(conn); 
     OleDbCommand commandSourceData = new OleDbCommand("SELECT * FROM [" + ConfigurationManager.AppSettings["csvname"] + "]", cn); 
     OleDbDataAdapter da = new OleDbDataAdapter(commandSourceData); 
     cn.Open(); 
     OleDbDataReader reader = commandSourceData.ExecuteReader(); 

     // Open the destination connection. In the real world you would 
     // not use SqlBulkCopy to move data from one table to the other 
     // in the same database. This is for demonstration purposes only. 
     using (SqlConnection destinationConnection = new SqlConnection(strCnx)) 
     { 
      destinationConnection.Open(); 

      // Set up the bulk copy object. 
      // Note that the column positions in the source 
      // data reader match the column positions in 
      // the destination table so there is no need to 
      // map columns. 
      using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection)) 
      { 
       bulkCopy.DestinationTableName = "GudsisUser"; 

       bulkCopy.WriteToServer(reader); 
      } 
      Console.WriteLine("Press Enter to finish."); 
      Console.ReadLine(); 
     } 

но приложение возвращать сообщение об ошибке: Невозможно разобрать значение строки в NCHAR значение

I понятия не имею, если моя программа является правильным или нет

+0

Какой «запрос» вы говорите, пытаетесь ли вы вставлять записи по одному? – Habib

+0

Вы можете сделать все изменения данных в DataSet и скрыть фактический процесс обновления или вставки, но в конце он всегда будет выполнять инструкции INSERT или UPDATE в вашей базе данных. – Filburt

+0

Опубликовать код. ваш вопрос действительно расплывчатый и трудный для понимания без какого-либо кода. – Paolo

ответ

1

Я предполагаю, что вы ищете что-то называется BULK INSERT (чтобы сделать все в пределах одного запроса БД?)

Если да, то ответьте на вопрос here

+0

Кроме того, здесь есть действительно хорошее общее решение: http://blog.developers.ba/bulk-insert-generic-list-sql-server-minimum-lines-code/ – quetzy

+0

Мне нужно «сохранить» мой запрос и его параметры для выполнения всех запросов в цикле и в цикле –

+0

Для чего вы хотите сделать, вы не можете создавать и выполнять SqlCommand каждый раз в цикле. Потяните создание SqlCommand перед циклом, загрузите значения в таблицу внутри цикла и выполните массовую вставку (со всеми этими данными) только один раз после цикла. Для реализации идей, пожалуйста, проверьте обе ссылки. – quetzy

Смежные вопросы