當前位置:首頁 » 操作系統 » c導入excel到資料庫

c導入excel到資料庫

發布時間: 2023-03-20 09:44:43

① C# 如何將EXCEL插入到資料庫

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Data;
usingSystem.Collections;
usingSystem.Windows.Forms;
usingSystem.Data.OleDb;
usingSystem.Data.Common;
usingSystem.Data.sqlClient;
publicpartialclassExcel導入_Default:System.Web.UI.Page
{
privatestaticstringfilename;
privatestaticstringsavePath;
privatestaticDataSetds;//要插入的數據
privatestaticDataTabledt;
protectedvoidPage_Load(objectsender,EventArgse)
{
}
//上傳文件到指定的伺服器
protectedvoidButton1_Click1(objectsender,EventArgse)
{
filename=this.fileUploadExcel.FileName;
//savePath必須包含表名在內的所有路徑名
savePath=@"G:項目組文件項目.net學習資料工程HealthExcel導入Files"+this.fileUploadExcel.FileName;//上傳伺服器文件的存儲,存在當前新建的文件夾
this.fileUploadExcel.SaveAs(savePath);
Booleanjudge_excel=Judge_Excel();
if(!judge_excel)
{
MessageBox.Show("上傳的不是excel文件","標題",MessageBoxButtons.OKCancel,MessageBoxIcon.Error);
return;
}
else
MessageBox.Show("上傳文件成功","標題",MessageBoxButtons.OKCancel,MessageBoxIcon.Information);
//測試,將excel中的sheet1導入到sqlserver中
//stringconnString="server=localhost;uid=sa;pwd=sqlgis;database=master";
//System.Windows.Forms.OpenFileDialogfd=newOpenFileDialog();
//if(fd.ShowDialog()==DialogResult.OK)
//{
////TransferData(fd.FileName,"sheet1",connString);
//}
}
//判斷文件是否是excel文件函數
protectedBooleanJudge_Excel()
{
stringfileExtend=System.IO.Path.GetExtension(this.fileUploadExcel.FileName);
if(fileExtend==".xlsx"||fileExtend==".xls")
returntrue;
else
returnfalse;
}
//獲取excel數據按鈕的觸發,
protectedvoidButton2_Click(objectsender,EventArgse)
{
ExcelToDataSet();
MessageBox.Show("獲取數據成功","標題",MessageBoxButtons.OKCancel,MessageBoxIcon.Information);
}
//從excel表中獲取數據的函數
publicvoidExcelToDataSet()
{
stringstrConn="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+savePath+";ExtendedProperties="Excel8.0;HDR=Yes;IMEX=1"";
OleDbConnectionconn=newOleDbConnection(strConn);//連接excel
if(conn.State.ToString()=="Open")
{
conn.Close();
}
conn.Open();//外部表不是預期格式,不兼容2010的excel表結構
strings=conn.State.ToString();
OleDbDataAdaptermyCommand=null;
ds=null;
/*DataTableyTable=conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,newObject[]{null,null,null,"TABLE"});//獲取表的框架,幾行幾列
stringtableName=yTable.Rows[0]["filename"].ToString();//表示的是幾行幾列
stringstrSel="select*from["+filename+"]";//xls*/
stringstrExcel="select*from[sheet1$]";//如果有多個sheet表時可以選擇是第幾張sheet表
myCommand=newOleDbDataAdapter(strExcel,conn);//用strExcel初始化myCommand,查看myCommand裡面的表的數據??
ds=newDataSet();
myCommand.Fill(ds);//把表中的數據存放在ds(dataSet)
conn.Close();
try
{
dt=ds.Tables[0];
this.dataGridView1.DataSource=dt;
}
catch(Exceptionerr)
{
MessageBox.Show("操作失敗!"+err.ToString());
}
}
//excel導入資料庫sql的按鈕觸發
protectedvoidButton3_Click(objectsender,EventArgse)
{
//stringpath=@"D:資料庫SQLServerMSSQL10_50.MSSQLSERVERMSSQLDATATest.mdf";
stringconnString="server=localhost;uid=sa;pwd=1234;database=Test";//連接資料庫的路徑方法
//StringconnString=@"server=localhost;uid=sa;pwd=1234;database=D:資料庫SQLServerMSSQL10_50.MSSQLSERVERMSSQLDATATest.mdf";
SqlConnectionconn=newSqlConnection(connString);
conn.Open();
DataRowdr=null;
intC_Count=dt.Columns.Count;//獲取列數
for(inti=0;i<dt.Rows.Count;i++)//記錄表中的行數,循環插入
{
dr=dt.Rows[i];
insertToSql(dr,C_Count,conn);
}
conn.Close();

if(dataGridView1.Rows.Count>0)//把資料庫表中的數據顯示到表中,可判斷有沒有數據
{
MessageBox.Show("導入成功!");
}
else
{
MessageBox.Show("沒有數據!");
}
}
//使用bcp,不容易出錯而且效率高
/*try
{
using(System.Data.SqlClient.SqlBulkCopybcp=newSystem.Data.SqlClient.SqlBulkCopy(connString))
{
bcp.SqlRowsCopied+=newSystem.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
bcp.BatchSize=100;//每次傳輸的行數
bcp.NotifyAfter=100;//進度提示的行數
bcp.DestinationTableName=savePath;//目標表
bcp.WriteToServer(ds.Tables[0]);
}
}
catch
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}*/
//插入資料庫的函數
protectedvoidinsertToSql(DataRowdr,intcolumn_count,SqlConnectionconn)
{
//excel表中的列名和資料庫中的列名一定要對應
stringname=dr[0].ToString();//需要把內個列都列出來
stringage=dr[1].ToString();
stringsex=dr[2].ToString();
//當資料庫中有多個表時,怎麼分辨插入的表
stringsql="insertinto客戶values('"+name+"','"+age+"','"+sex+"')";
SqlCommandcmd=newSqlCommand(sql,conn);
cmd.ExecuteNonQuery();
}
//從excel表中獲取數據並存在
//protectedvoidImportFromExcel()
//{
//stringexecelConnectionStr=@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=filename;
//ExtendedProperties=""Excel8.0;HDR=YES;IMEX=1""";//表第一行是標題,不做為數據使用,Excel檔案只能用來做「讀取」用途。
//ds=newDataSet();
//stringconnString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="
//+savePath+";ExtendedProperties="Excel8.0;HDR=Yes;IMEX=1"";
//DataTabletable=OleDbHelper.GetExcelTables(connString);
//if(table==null||table.Rows.Count<=0)
//{
//return;
//}
//foreach(DataRowdrintable.Rows)
//{
//stringcmdText="select*from["+dr["TABLE_NAME"].ToString()+"]";
//DataTabledt=OleDbHelper.FillDataTable(connString,cmdText);
//dt.TableName=dr["TABLE_NAME"].ToString();
//ds.Tables.Add(dt);
//}
//}
}

② 如何將excel表格的數據導入到mysql數據中去

工具:office excel、mysql

步驟:

1、打開mysql,用mysql命令創建一個表。

③ 把Excel工作表中數據導入資料庫

這是第二次了,市場部那邊又來要求改數據。他們要改的是資料庫某張表中類似商品價格等的數據,需要改的地方又多,我們上次是靠新來的兄弟一個個給Update進去的,這次老大去教了他們Update語句,把煩人的皮球踢給他們了。但這樣一個個更新很明顯不是辦法,我想通過excel直接把數據導入資料庫應該是可行的吧,就開始找方法了。
我想至少有這樣兩種比較容易實現的方法:
1、直接用Sql語句查詢
2、先用excle中的數據生成xml文件,再把xml導入資料庫
第一種方法(方法二以後再試),找到聯機叢書里實現此功能的Sql語句如下:
SELECT* FROMOpenDataSource('Microsoft.Jet.OLEDB.4.0', 'DataSource="c:Financeaccount.xls";UserID=Admin;Password=;Extendedproperties=Excel5.0')…xactions
語句是有了,但我還是試了很久,因為各個參數具體該怎麼設置它沒有說。Data Source就是excel文件的路徑,這個簡單;UserId、Password和Extended properties這三個屬性我改成了各種各樣的與本機有關的用戶名、密碼以及excel版本都不對,最後用上面例子里的值“User ID=Admin;Password=;Extended properties=Excel 5.0”才成功了,暈啊;最後個“xactions”更是查了很多資料,其實就僅僅是excel文件里所選的工作表名而已,怪我對excel不夠熟悉了,另外注意默認的Sheet1要寫成[Sheet1$]
最後,看看我成功的測試
資料庫里建好一個表testTable_1,有5個欄位id, name, date, money, content,C盤下book1.xls文件的sheet1工作表裡寫好對應的數據並設好數據類型,執行如下插入語句:
insertintotestTable_1([name],[date],[money],[content]) Select[姓名],[日期],[金額],[內容] FROMOpenDataSource('Microsoft.Jet.OLEDB.4.0', 'DataSource="C:Book1.xls"; UserID=Admin;Password=;Extendedproperties=Excel5.0')…[Sheet1$]
select里的列名我一開始用*代替,但發現輸出順序與我預期的不同,是“金額、內容、日期、姓名”,不知道具體有什麼規律,就老老實實寫名字了。操作成功
回過頭來看看市場部的要求,假設在我這張表裡實現,可以先判斷如excel里存在與記錄相同的name欄位(name要唯一非空)時就刪除記錄,之後再插入,這樣簡單,但自增的id欄位會因為插入而改變,那是不行的了。可行的方法是先讀出excel里全部記錄,然後用游標一條條分析,如果存在這個name就更新否則就插入。OK,下次就不用讓他們再對著文檔一條條Update了

④ C#中如何將Excel中的數據批量導入到sql server

1.本文實現在c#中可高效的將excel數據導入到sqlserver資料庫中,很多人通過循環來拼接sql,這樣做不但容易出錯而且效率低下,最好的辦法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 類來實現。不但速度快,而且代碼簡單,下面測試代碼導入一個6萬多條數據的sheet,包括讀取(全部讀取比較慢)在我的開發環境中只需要10秒左右,而真正的導入過程只需要4.5秒。x0dx0a2.代碼如下:x0dx0ausing System; x0dx0ausing System.Data; x0dx0ausing System.Windows.Forms; x0dx0ausing System.Data.OleDb; x0dx0anamespace WindowsApplication2 x0dx0a{ x0dx0a public partial class Form1 : Form x0dx0a { x0dx0a public Form1() x0dx0a { x0dx0a InitializeComponent(); x0dx0a } x0dx0ax0dx0a private void button1_Click(object sender, EventArgs e) x0dx0a { x0dx0a //測試,將excel中的sheet1導入到sqlserver中 x0dx0a string connString = "server=localhost;uid=sa;pwd=sqlgis;database=master"; x0dx0a System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog(); x0dx0a if (fd.ShowDialog() == DialogResult.OK) x0dx0a { x0dx0a TransferData(fd.FileName, "sheet1", connString); x0dx0a } x0dx0a } x0dx0ax0dx0a public void TransferData(string excelFile, string sheetName, string connectionString) x0dx0a { x0dx0a DataSet ds = new DataSet(); x0dx0a tryx0dx0a { x0dx0a //獲取全部數據 x0dx0a string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;"; x0dx0a OleDbConnection conn = new OleDbConnection(strConn); x0dx0a conn.Open(); x0dx0a string strExcel = ""; x0dx0a OleDbDataAdapter myCommand = null; x0dx0a strExcel = string.Format("select * from [{0}$]", sheetName); x0dx0a myCommand = new OleDbDataAdapter(strExcel, strConn); x0dx0a myCommand.Fill(ds, sheetName); x0dx0ax0dx0a //如果目標表不存在則創建 x0dx0a string strSql = string.Format("if object_id('{0}') is null create table {0}(", sheetName); x0dx0a foreach (System.Data.DataColumn c in ds.Tables[0].Columns) x0dx0a { x0dx0a strSql += string.Format("[{0}] varchar(255),", c.ColumnName); x0dx0a } x0dx0a strSql = strSql.Trim(',') + ")"; x0dx0ax0dx0a using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connectionString)) x0dx0a { x0dx0a sqlconn.Open(); x0dx0a System.Data.SqlClient.SqlCommand command = sqlconn.CreateCommand(); x0dx0a command.CommandText = strSql; x0dx0a command.ExecuteNonQuery(); x0dx0a sqlconn.Close(); x0dx0a } x0dx0a //用bcp導入數據 x0dx0a using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString)) x0dx0a { x0dx0a bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied); x0dx0a bcp.BatchSize = 100;//每次傳輸的行數 x0dx0a bcp.NotifyAfter = 100;//進度提示的行數 x0dx0a bcp.DestinationTableName = sheetName;//目標表 x0dx0a bcp.WriteToServer(ds.Tables[0]); x0dx0a } x0dx0a } x0dx0a catch (Exception ex) x0dx0a { x0dx0a System.Windows.Forms.MessageBox.Show(ex.Message); x0dx0a }x0dx0a } x0dx0ax0dx0a //進度顯示 x0dx0a void bcp_SqlRowsCopied(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e) x0dx0a { x0dx0a this.Text = e.RowsCopied.ToString(); x0dx0a this.Update(); x0dx0a }x0dx0a } x0dx0a} x0dx0a3.上面的TransferData基本可以直接使用,如果要考慮周全的話,可以用oledb來獲取excel的表結構,並且加入ColumnMappings來設置對照欄位,這樣效果就完全可以做到和sqlserver的dts相同的效果了。

⑤ 求一個C# Excel導入資料庫的源碼

環境:c#.2005+Access+ Sql
一、把DataTable插入資料庫
public static void DataTableToDB()
{
string _strExcelFileName = @"D:\example.xls";
DataTable dtExcel = ExcelToDataTable(_strExcelFileName,"Sheet1");
for (int i = 0; i < dtExcel.Rows.Count; i++)
{
InsertDataToAccess(dtExcel.Rows[i][0].ToString(), float.Parse(dtExcel.Rows[i][1].ToString()));
}
}

二、把Excel數據讀入DataTable
public static DataTable ExcelToDataTable(string strExcelFileName, string strSheetName)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" +"Extended Properties=Excel 5.0;";
string strExcel = string.Format("select * from [{0}$]", strSheetName);
DataSet ds = new DataSet();

using (OleDbConnection conn = new OleDbConnection(strConn))
{
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
adapter.Fill(ds, strSheetName);
conn.Close();
}

return ds.Tables[strSheetName];
}

三、向Access資料庫表插入數據
public static void InsertDataToAccess(string _strPara,float _fPara)
{
OleDbConnection oleDbConn = new OleDbConnection();
oleDbConn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\ExcelData.mdb;User Id=admin;Password=;";
oleDbConn.Open();

string strInsertString = "INSERT INTO tb_excelData (strCollumn1,fCollumn2) VALUES (@strCollumn1,@fCollumn2)";
OleDbCommand oComm = new OleDbCommand(strInsertString, oleDbConn);
oComm.Parameters.Add("@strCollumn1", OleDbType.Char , 50);
oComm.Parameters["@strCollumn1"].Value = _strPara;
oComm.Parameters.Add("@fCollumn2", OleDbType.Double);
oComm.Parameters["@fCollumn2"].Value = _fPara;

ocomm.ExecuteNonQuery();
oleDbConn.Close();
}

⑥ 如何把Excel數據導入到資料庫表中 asp.net

我曾經做過一個類似功能的程序,不難,邏輯如下:
private void ImportExcelIntoDB()
{

// Get reader for the Excel file
OleDbDataReader reader = GetReader();
// Open database
OpenDatabaseConneciton();

// Loop reading each row from Excel file
while (reader.Read())
{
// write row into files
WriteRowIntoDatabase(reader);
progressBarWriting.ProgressBar.PerformStep();
}

// Close database
CloseDatabaseConnection();
// Close reader
reader.Close();

}

⑦ 如何用命令將Excel導入資料庫中

用SQL命令把Excel中的數據導入word中去:
SQL SERVER 和EXCEL的數據導入導出
1、在SQL SERVER里查詢Excel數據:
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
下面是個查詢的示例,它通過用於 Jet 的 OLE DB 提供程序查詢 Excel 電子表格。
SELECT *
FROM OpenDataSource ( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
2、將Excel的數據導入SQL server :
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$]
實例:
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
3、將SQL SERVER中查詢到的數據導成一個Excel文件
T-SQL代碼:
EXEC master..xp_cmdshell 'bcp 庫名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'
參數:S 是SQL伺服器名;U是用戶;P是密碼
說明:還可以導出文本文件等多種格式
實例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"'
EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword'
在VB6中應用ADO導出EXCEL文件代碼:
Dim cn As New ADODB.Connection
cn.open "Driver={SQL Server};Server=WEBSVR;DataBase=WebMis;UID=sa;WD=123;"
cn.execute "master..xp_cmdshell 'bcp "SELECT col1, col2 FROM 庫名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword'"

4、在SQL SERVER里往Excel插入數據:
insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...table1 (A1,A2,A3) values (1,2,3)
T-SQL代碼:
INSERT INTO
OPENDATASOURCE('Microsoft.JET.OLEDB.4.0',
'Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls')...[Filiale1$]
(bestand, prokt) VALUES (20, 'Test')建議樓主可以在淘寶買個excel教程,以備不時之需,推薦店鋪,冬之佳網路科技,我在裡面看過,很全價格低還會不定時更新教程,望採納答案哦

⑧ C語言中如何導入excel的數據

簡單的方法是通過ODBC來實現:
具體實現
一、 包含Excel文件操作類頭文件
#include "CSpreadSheet.h"
二、 新建Excel文件,並寫入默認數據
// 新建Excel文件名及路徑,TestSheet為內部表名
CSpreadSheet SS("c:\\Test.xls", "TestSheet");

CStringArray sampleArray, testRow;

SS.BeginTransaction();

// 加入標題
sampleArray.RemoveAll();
sampleArray.Add("姓名");
sampleArray.Add("年齡");
SS.AddHeaders(sampleArray);

// 加入數據
CString strName[] = {"徐景周","徐志慧","郭徽","牛英俊","朱小鵬"};
CString strAge[] = {"27","23","28","27","26"};
for(int i = 0; i < sizeof(strName)/sizeof(CString); i++)
{
sampleArray.RemoveAll();
sampleArray.Add(strName[i]);
sampleArray.Add(strAge[i]);
SS.AddRow(sampleArray);
}

SS.Commit();

三、 讀取Excel文件數據
CSpreadSheet SS("c:\\Test.xls", "TestSheet");

CStringArray Rows, Column;

//清空列表框
m_AccessList.ResetContent();
for (int i = 1; i <= SS.GetTotalRows(); i++)
{
// 讀取一行
SS.ReadRow(Rows, i);
CString strContents = "";
for (int j = 1; j <= Rows.GetSize(); j++)
{
if(j == 1)
strContents = Rows.GetAt(j-1);
else
strContents = strContents + " --> " + Rows.GetAt(j-1);
}

m_AccessList.AddString(strContents);
}

熱點內容
阿里雲桌面和伺服器區別 發布:2025-08-28 04:13:51 瀏覽:96
stl常用演算法 發布:2025-08-28 04:01:28 瀏覽:440
貨運發布源碼 發布:2025-08-28 03:44:26 瀏覽:438
希望之村怎麼進單人伺服器教程 發布:2025-08-28 03:35:54 瀏覽:836
資料庫題型 發布:2025-08-28 03:35:19 瀏覽:167
python列表元素 發布:2025-08-28 03:35:08 瀏覽:736
康奈爾大學專業訪問學者 發布:2025-08-28 03:33:35 瀏覽:980
馬恩資料庫 發布:2025-08-28 02:56:58 瀏覽:359
如何搭建自己的kms伺服器 發布:2025-08-28 02:46:29 瀏覽:860
java取對象的屬性 發布:2025-08-28 02:35:29 瀏覽:718