2013-09-29 5 views
2

Здесь я хочу, чтобы вставить все данные из моего первенствовать листа в SQL Server таблицы с помощью кода на C#Импорт изображений из листа Excel в SQL Server таблицы C#

У меня есть лист Excel с данными, как это

ID Name Designation ProfilePicture 
-------------------------------------------- 
1 ABC  Manager  C:\Pictures\1.jpg 
2 DEF  Asst.Manager C:\Pictures\2.jpg 

И у меня есть код, чтобы вставить DATAS в таблицу

String filePath = filePathText.Text; 
String fileExtension = "Excel 12.0"; 
if (filePath != null) 
{ 
    String xlsConnection = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=" + "\"" + fileExtension + ";HDR=YES;\""; 

    String sqlConnection = "Your Connection String"; 

    //Connection to Excel work book 
    OleDbConnection xlsConnectionString = new OleDbConnection(xlsConnection); 

    //Fetch data from Excel 
    OleDbCommand cmd = new OleDbCommand("Select [ID],[Name],[Designation],[ProfilePicture] from [Sheet1$]", xlsConnectionString); 

    xlsConnectionString.Open(); 

    OleDbDataReader dReader; 
    dReader = cmd.ExecuteReader(); 
    SqlBulkCopy sqlBulk = new SqlBulkCopy(sqlConnection); 

    //Destination table name 
    sqlBulk.DestinationTableName = "EXCEL_DATA"; 

    sqlBulk.WriteToServer(dReader); 

    xlsConnectionString.Close(); 
} 

Эта часть кода выполняется, если нажать на кнопку.

Мой вопрос: как загрузить изображение из листа Excel (у листа есть путь к изображению). до SQL Server Таблица. Я хочу получить изображение с помощью изображения, указанного в листе Excel, и сохранить его как varbinary(MAX) в SQL Server.

ответ

2

Спасибо за ребята, которые действительно работают, чтобы опубликовать ответ. Наконец, я сам решил проблему.

Вот код, который помогает вставлять изображения в SQL Server с помощью Пути, приведенного в Excel sheet.

private void insert_Click(object sender, EventArgs e) 
    { 

     UInt64 ID = 0; 
     String Name = String.Empty; 
     String Designation = String.Empty; 
     String ProfilePicture = String.Empty; 

     String filePath = filePathText.Text; 

     Excel.Application xlApp = null; 
     Excel.Workbook xlWorkbook = null; 
     Excel._Worksheet xlWorksheet = null; 
     Excel.Range xlRange = null; 

     String sqlConnectionString = "Your Connection String goes here"; 

     String insertRecord = "INSERT_USER_RECORDS"; 

     SqlConnection sqlConnection = new SqlConnection(sqlConnectionString); 
     SqlCommand sqlCommand = new SqlCommand(insertRecord, sqlConnection); 
     sqlCommand.CommandType = CommandType.StoredProcedure; 

     sqlConnection.Open(); 

     if (filePath != null) 
     { 

      try 
      { 

       xlApp = new Excel.Application(); 
       xlWorkbook = xlApp.Workbooks.Open(filePath); 
       xlWorksheet = (Excel._Worksheet)xlWorkbook.Sheets[1]; 
       xlRange = xlWorksheet.UsedRange; 

       int rowCount = xlRange.Rows.Count; 
       int colCount = xlRange.Columns.Count; 

       for (int row = 1; row <= rowCount; row++) 
       { 
        for (int col = 1; col <= colCount; col++) 
        { 
         MessageBox.Show((xlRange.Cells[row, col] as Microsoft.Office.Interop.Excel.Range).Value2.ToString()); 

         // Check xlRange for Every run. And assign values to local variables. Here I just show the values using MsgBox 

         // If you get the Path of Image then call the function to Convert Image into byte 

         // Convert Image to Byte Function definition. 

         /* System.IO.FileStream fs = new System.IO.FileStream(ProfilePicture, System.IO.FileMode.Open); 
          Byte[] imageAsBytes = new Byte[fs.Length]; 
          fs.Read(imageAsBytes, 0, imageAsBytes.Length); 
          fs.Close(); 
          return imageAsBytes; */ 

        } 

        sqlCommand.Parameters.Clear(); 
        sqlCommand.Parameters.Add("@Name", SqlDbType.NVarChar).Value = FirstName; 
        sqlCommand.Parameters.Add("@Designation", SqlDbType.NVarChar).Value = LastName; 
        sqlCommand.Parameters.Add("@ProfilePicture", SqlDbType.VarBinary).Value = imageAsBytes; 
        sqlCommand.Parameters.Add("@ID", SqlDbType.BigInt).Value = ID; 

        sqlCommand.ExecuteNonQuery(); 
       } 


       MessageBox.Show(Path.GetFileName(filePath) + "is Successfully imported to SQL Server", "Result", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message, "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      finally 
      { 
       //Release All objects and close the Connection to prevent the Excel file from lock. 

       sqlConnection.Close(); 

       GC.Collect(); 
       GC.WaitForPendingFinalizers(); 

       Marshal.FinalReleaseComObject(xlRange); 
       Marshal.FinalReleaseComObject(xlWorksheet); 

       xlWorkbook.Close(Type.Missing, Type.Missing, Type.Missing); 
       Marshal.FinalReleaseComObject(xlWorkbook); 

       xlApp.Quit(); 
       Marshal.FinalReleaseComObject(xlApp); 

      } 
     } 
     else 
     { 
      MessageBox.Show("Please Select the Valid file to import"); 
     } 
    } 

Этот код прекрасно работает и помогает мне, чтобы вставить изображение в базу данных SQL из Excel. Независимо от версии файла excel.

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