2015-05-21 3 views
0

Я хочу переместить некоторые данные из файла Excel в мою базу данных. Я использую C# это мой код:переместить некоторые данные из excel в sql

 //conecting to DB 
     SqlConnection sqlcon = new SqlConnection("Data Source=.;Initial Catalog=ghalamchi;Integrated Security=True"); 
     SqlCommand SqlCmd = new SqlCommand(); 
     SqlCmd.Connection = sqlcon; 
     SqlCmd.CommandType = CommandType.StoredProcedure; 
     SqlCmd.CommandText = "SP_AddStudent"; 

     int counter = 0; 

     int i = 21; 
     { 
      SqlCmd.Parameters.Add("@id", SqlDbType.Char, 20).Value = Ds.Tables[0].Rows[i][0].ToString(); 
      SqlCmd.Parameters.Add("@name", SqlDbType.NVarChar, 50).Value = Ds.Tables[0].Rows[i][1].ToString(); 
      SqlCmd.Parameters.Add("@family", SqlDbType.NVarChar, 80).Value = Ds.Tables[0].Rows[i][2].ToString(); 
      SqlCmd.Parameters.Add("@codeM", SqlDbType.Char, 15).Value = Ds.Tables[0].Rows[i][3].ToString(); 
      //SqlCmd.Parameters.Add("@city", SqlDbType.NVarChar, 30).Value = txb_city.Text; 
      //SqlCmd.Parameters.Add("@street", SqlDbType.NVarChar, 40).Value = txb_street.Text; 
      SqlCmd.Parameters.Add("@Addres", SqlDbType.NVarChar, 150).Value = Ds.Tables[0].Rows[i][4].ToString(); 
      SqlCmd.Parameters.Add("@telephon", SqlDbType.NChar, 15).Value = Ds.Tables[0].Rows[i][5].ToString(); 
      SqlCmd.Parameters.Add("@mobile", SqlDbType.NChar, 15).Value = Ds.Tables[0].Rows[i][6].ToString(); 
      SqlCmd.Parameters.Add("@rabet1", SqlDbType.NChar, 15).Value = Ds.Tables[0].Rows[i][7].ToString(); 
      SqlCmd.Parameters.Add("@rabet2", SqlDbType.NChar, 15).Value = Ds.Tables[0].Rows[i][8].ToString(); 
      SqlCmd.Parameters.Add("@SchoolName", SqlDbType.NVarChar, 50).Value = Ds.Tables[0].Rows[i][9].ToString(); 
      SqlCmd.Parameters.Add("@avg", SqlDbType.Char, 6).Value = Ds.Tables[0].Rows[i][10].ToString(); 
      SqlCmd.Parameters.Add("@returnValue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue; 
      sqlcon.Open(); 

      SqlCmd.ExecuteNonQuery(); 

      if (SqlCmd.Parameters["@returnValue"].Value.ToString() == "1") 
       counter++; 

      sqlcon.Close();    
     } 

в этом коде, читать specefice строку, декларировать с переменной "I". она работает правильно. когда я использую для(), для чтения всех строк файла Excell, этот код содержит ошибку это ошибка:

Процедуру или функцию SP_AddStudent указали слишком много аргументов ,

я думаю, что произошла эта ошибка, потому что скорость дб низка, и она не может читать писать все строки быстро

for (int i = 0; i < Ds.Tables[0].Rows.Count; i++)    
     { 
      SqlCmd.Parameters.Add("@id", SqlDbType.Char, 20).Value = Ds.Tables[0].Rows[i][0].ToString(); 
      SqlCmd.Parameters.Add("@name", SqlDbType.NVarChar, 50).Value = Ds.Tables[0].Rows[i][1].ToString(); 
      SqlCmd.Parameters.Add("@family", SqlDbType.NVarChar, 80).Value = Ds.Tables[0].Rows[i][2].ToString(); 
      SqlCmd.Parameters.Add("@codeM", SqlDbType.Char, 15).Value = Ds.Tables[0].Rows[i][3].ToString(); 
      //SqlCmd.Parameters.Add("@city", SqlDbType.NVarChar, 30).Value = txb_city.Text; 
      //SqlCmd.Parameters.Add("@street", SqlDbType.NVarChar, 40).Value = txb_street.Text; 
      SqlCmd.Parameters.Add("@Addres", SqlDbType.NVarChar, 150).Value = Ds.Tables[0].Rows[i][4].ToString(); 
      SqlCmd.Parameters.Add("@telephon", SqlDbType.NChar, 15).Value = Ds.Tables[0].Rows[i][5].ToString(); 
      SqlCmd.Parameters.Add("@mobile", SqlDbType.NChar, 15).Value = Ds.Tables[0].Rows[i][6].ToString(); 
      SqlCmd.Parameters.Add("@rabet1", SqlDbType.NChar, 15).Value = Ds.Tables[0].Rows[i][7].ToString(); 
      SqlCmd.Parameters.Add("@rabet2", SqlDbType.NChar, 15).Value = Ds.Tables[0].Rows[i][8].ToString(); 
      SqlCmd.Parameters.Add("@SchoolName", SqlDbType.NVarChar, 50).Value = Ds.Tables[0].Rows[i][9].ToString(); 
      SqlCmd.Parameters.Add("@avg", SqlDbType.Char, 6).Value = Ds.Tables[0].Rows[i][10].ToString(); 
      SqlCmd.Parameters.Add("@returnValue", SqlDbType.Int).Direction = ParameterDirection.ReturnValue; 
      sqlcon.Open(); 

      SqlCmd.ExecuteNonQuery(); 

      if (SqlCmd.Parameters["@returnValue"].Value.ToString() == "1") 
       counter++; 

      sqlcon.Close(); 




     } 

что я должен делать? в конце я не могу говорить englishe очень хорошо, жаль ...

+2

Это ** не ** проблема скорости. У вас больше параметров в коде C#, которые вы указали в своей хранимой процедуре. Попробуйте перевести сообщение об ошибке на ваш родной язык (слово в слово, а не с помощью google translate). –

+1

- это требование для импорта данных из excel в базу данных с помощью C#? или любым другим способом? –

+0

Наверное, вы слишком сложны здесь, есть более простые способы импорта Excel на SQL Server, см., Например, http://www.codeproject.com/Tips/636719/Import-MS-Excel-data-to-SQL-Server-table-using-Csh –

ответ

0

--Here код для массовой вставки .WRITE функцию для записи данных в базу данных без процедуры Параметр .в использовать ту же временную таблицу, чтобы вставить данные в вашей реальной таблице

public void WriteData() 
     { 
      using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings["Connection"].ConnectionString)) 
      { 
       //System.Data.SqlClient.SqlBulkCopyOptions st = new System.Data.SqlClient.SqlBulkCopyOptions(); 

       //GetBulkCopy(ConfigurationManager.ConnectionStrings["Connection"].ConnectionString, SqlBulkCopyOptions.KeepIdentity) 
       using (System.Data.SqlClient.SqlBulkCopy bulk = new SqlBulkCopy(conn)) 
       { 
        conn.Open(); 
        System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(TempTable, conn); 
        cmd.ExecuteNonQuery(); 


        bulk.DestinationTableName = "#ImportData"; 
        for (Int32 I = 0; I < DTFinal.Columns.Count; I++) 
        { 
         bulk.ColumnMappings.Add(DTFinal.Columns[I].ToString(), DTFinal.Columns[I].ToString()); 
        } 
        bulk.WriteToServer(DTFinal); 
        cmd = new System.Data.SqlClient.SqlCommand("dbo.SP_AddStudent", conn); 
        cmd.CommandType = CommandType.StoredProcedure; 
        cmd.ExecuteNonQuery(); 

       } 
       //conn.Open(); 
       //System.Data.SqlClient.SqlCommand 

       conn.Close(); 

      } 
     } 
+0

Надеюсь, вы понимаете код и соответствующим образом изменяете. –

+0

Благодарим вас за помощь –

0

моя догадка была правильной скорость ввода данных было больше, чем контроль базы данных, так что не могу Генделя его. поэтому я поставил все выше кода в методе (Add_SQL (интермедиат строки)) вызов его для цикла:

для (INT I = 0; I < Ds.Tables [0] .Rows.Count ; i ++) Add_SQL (i);

этим путем, вызывая метод и делает код и вызвав следующий метод сделать оттянуть база данных может управлять данными

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