2014-02-10 5 views
2

Как импортировать данные из листа Excel в базу данных SQL Server в asp net?Импорт данных из листа Excel в базу данных SQL Server

Dim OleDbcon As New OleDbConnection((Convert.ToString("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=") & path) + ";Extended Properties=Excel 12.0;") 

Dim cmd As New OleDbCommand("SELECT * FROM [Sheet1$]", OleDbcon) 
Dim objAdapter1 As New OleDbDataAdapter(cmd) 

OleDbcon.Open() 
Dim dr As DbDataReader = cmd.ExecuteReader() 

Dim con_str As String = "Data Source=.;Initial Catalog=studentdetails;Integrated Security=True" 

' Bulk Copy to SQL Server 
Dim bulkInsert As New SqlBulkCopy(con_str) 
bulkInsert.DestinationTableName = "Table name" 
bulkInsert.WriteToServer(dr) 
OleDbcon.Close()e here 
+0

Перейдите по этой ссылке [] (stackoverflow.com http://stackoverflow.com/questions/12378705/importing-excel-to-sql-database-using -vb-net-and-asp-net) –

+0

также проверьте этот ответ http://stackoverflow.com/questions/10447015/uploading-an-excel-sheet-and-importing-the-data-into-sql-server- база данных –

ответ

5

Перерыв это на два этапа:

1) Сохраните файл где-то - это очень часто можно увидеть это:

строка saveFolder = @ "C: \ Temp \ загрузки"; // Выберите папку на вашем компьютере для хранения загруженных файлов.

string filePath = Path.Combine (saveFolder, FileUpload1.FileName);

FileUpload1.SaveAs (filePath); Теперь у вас есть файл локально, и реальная работа может быть выполнена.

2) Получить данные из файла. Ваш код должен работать так, как есть, но вы можете просто написать строку подключения таким образом:

string excelConnString = String.Format ("Provider = Microsoft.Jet.OLEDB.4.0; Источник данных = {0}; Расширенные свойства =" Excel 12.0 ";", filePath); Затем вы можете подумать об удалении файла, который вы только что загрузили и импортировали.

Чтобы обеспечить более конкретный пример, мы можем реорганизовать свой код на два метода:

private void SaveFileToDatabase(string filePath) 
{ 
    String strConnection = "Data Source=.\\SQLEXPRESS;AttachDbFilename='C:\\Users\\Hemant\\documents\\visual studio 2010\\Projects\\CRMdata\\CRMdata\\App_Data\\Database1.mdf';Integrated Security=True;User Instance=True"; 

    String excelConnString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0\"", filePath); 
    //Create Connection to Excel work book 
    using (OleDbConnection excelConnection = new OleDbConnection(excelConnString)) 
    { 
     //Create OleDbCommand to fetch data from Excel 
     using (OleDbCommand cmd = new OleDbCommand("Select [ID],[Name],[Designation] from [Sheet1$]", excelConnection)) 
     { 
      excelConnection.Open(); 
      using (OleDbDataReader dReader = cmd.ExecuteReader()) 
      { 
       using(SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection)) 
       { 
        //Give your Destination table name 
        sqlBulk.DestinationTableName = "Excel_table"; 
        sqlBulk.WriteToServer(dReader); 
       } 
      } 
     } 
    } 
} 


private string GetLocalFilePath(string saveDirectory, FileUpload fileUploadControl) 
{ 


    string filePath = Path.Combine(saveDirectory, fileUploadControl.FileName); 

    fileUploadControl.SaveAs(filePath); 

    return filePath; 

} 

Вы могли бы просто затем вызвать SaveFileToDatabase (GetLocalFilePath (@ "C: \ Temp \ загрузки", FileUpload1));

Рассмотрите другие расширенные свойства для строки подключения Excel. Они полезны!

Другие улучшения, которые вы, возможно, захотите сделать, включают в себя включение строки подключения базы данных Sql в конфигурацию и добавление правильной обработки исключений. Пожалуйста, рассмотрите этот пример только для демонстрации!

+0

Извините, я могу помочь вам только на C#. –

+0

Работал как-только что изменился в соответствии с моими потребностями. Красивый. Спасибо!
Изменено подключение для извлечения из Appconfig – PCPGMR

+0

проверить этот ответ http://stackoverflow.com/questions/10447015/uploading-an-excel-sheet-and-importing-the-data-into-sql-server-database –

-2

Добавить DataTable, который может хранить данные Excel, созданные с помощью OLEDb.

string excelconnectionstring = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelfilepath + ";Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text;Jet OLEDB:Max Buffer Size=256;"); 

using (OleDbConnection oledbconn = new OleDbConnection(excelconnectionstring)) 
    { 
        using (OleDbCommand oledbcmd = new OleDbCommand(myexceldataquery, oledbconn)) 
        { 
         oledbconn.Open(); 
         OleDbDataReader dr = oledbcmd.ExecuteReader(); 


         dtBulkUpload.Load(dr); 
} 
} 

Затем сериализуйте этот DataTable в XML, который может быть отправлен в SQL Stored Proc. Такой подход очень полезен, если есть слишком много полеев и вы можете отправить все в одном параметре

using (StringWriter strXML = new StringWriter()) 
{ 
    dtBulkUpload.TableName = "BulkUpload"; 
    dtBulkUpload.WriteXml(strXML, XmlWriteMode.IgnoreSchema, false); 
    xmlString = strXML.ToString(); 
}          



using (SqlCommand cmd = new SqlCommand("Stored PROC Name")) 
{ 
    cmd.Parameters.AddWithValue("@dtBulkUpload", bulkUploadData); 
         //SqlParameter returnParameter = cmd.Parameters.Add("@result", SqlDbType.NVarChar); 
         //returnParameter.Direction = ParameterDirection.Output; 
         cmd.Parameters.Add("@result", SqlDbType.NVarChar,3000); 
         cmd.Parameters["@result"].Direction = ParameterDirection.Output; 

         cmd.Connection = con; 
         cmd.CommandType = CommandType.StoredProcedure; 

         con.Open(); 
         cmd.ExecuteNonQuery(); 
         query = (string)(cmd.Parameters["@result"].Value.ToString()); 
         con.Close(); 
+0

Вы используют объект «dtBulkUpload», который не инициализируется нигде в вашем коде –

0

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

protected void Button1_Click(object sender, EventArgs e) 
{ 
try 
{ 
SqlConnection con = new SqlConnection(@"Data 
Source=SANI2711\SQLEXPRESS;Initial Catalog=customer;Integrated 
Security=True;"); 
con.Open(); 
DataTable dt = new DataTable(); 
dt = DataExcel(); 
if (dt.Rows.Count > 0) 
{ 
for() 
} 
} 
catch(Exception ex) 
{ 
Response.Write(ex); 
} 
} 
protected void Button2_Click(object sender, EventArgs e) 
{ 
try 
{ 
SqlConnection con = new SqlConnection(@"Data 
Source=SANI2711\SQLEXPRESS;Initial Catalog=customer;Integrated 
Security=True;"); 
con.Open(); 
DataTable dt = new DataTable(); 
dt = DataExcel(); 
if (dt.Rows.Count > 0) 
{ 
SqlBulkCopy objbulk = new SqlBulkCopy(con); 
objbulk.DestinationTableName = "customer1"; 
objbulk.ColumnMappings.Add("CustomerID", "CustomerID"); 
objbulk.ColumnMappings.Add("City", "City"); 
objbulk.ColumnMappings.Add("Country", "Country"); 
    objbulk.ColumnMappings.Add("PostalCode", "PostalCode"); 
    objbulk.WriteToServer(dt); 
    } 
} 
catch (Exception ex) 
{ 
Response.Write(ex); 
} 
} 
protected DataTable DataExcel() 
{ 
DataTable dt = new System.Data.DataTable(); 
try 
{ 
string [email protected]"C:\Users\sani singh\Documents\Excel03.xls"; 
string sWorkbook = "[Sheet1$]"; 
string [email protected]"Provider=Microsoft.Jet.OLEDB.4.0;Data 
Source="+filenname+";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"; 
OleDbConnection OleDbConn = new OleDbConnection(ExcelConnectionString); 
OleDbConn.Open(); 
OleDbCommand OleDbCmd = new OleDbCommand(("SELECT * FROM " + sWorkbook), 
OleDbConn); 
DataSet ds = new DataSet(); 
OleDbDataAdapter sda = new OleDbDataAdapter(OleDbCmd); 
sda.Fill(ds); 
dt = ds.Tables[0]; 
OleDbConn.Close(); 
} 
catch(Exception ex) 
{ 
Response.Write(ex); 
} 
return dt; 
} 
} 
} 
Смежные вопросы