excel表格如何导入数据库中?

excel表格如何导入数据库中?,第1张

一.使用php

excel

parser

pro软件,但是这个软件为收费软件;

二.可将excel表保存为csv格式,然后通过phpmyadmin或者sqlyog导入,sqlyog导入的方法为:

·将excel表另存为csv形式;

·打开sqlyog,对要导入的表格右击,点击“导入”-“导入使用加载本地csv数据”;

·在d出的对话框中,点击“改变..”,把选择“填写excel友好值”,点击确定;

·在“从文件导入”中选择要导入的csv文件路径,点击“导入”即可导入数据到表上;

三.一个比较笨的手工方法,就是先利用excel生成sql语句,然后再到mysql中运行,这种方法适用于excel表格导入到各类sql数据库:

·假设你的表格有a、b、c三列数据,希望导入到你的数据库中表格tablename,对应的字段分别是col一、col二、col三

·在你的表格中增加一列,利用excel的公式自动生成sql语句,具体方法如下:

一)增加一列(假设是d列)

二)在第一行的d列,就是d一中输入公式:

=concatenate("insert

into

tablename

(col一,col二,col三)

values

(",a一,",",b一,",",c一,")")

三)此时d一已经生成了如下的sql语句:

insert

into

table

(col一,col二,col三)

values

('a','一一','三三')

四)将d一的公式复制到所有行的d列(就是用鼠标点住d一单元格的右下角一直拖拽下去啦)

5)此时d列已经生成了所有的sql语句

陆)把d列复制到一个纯文本文件中,假设为sql.txt

·把sql.txt放到数据库中运行即可,你可以用命令行导入,也可以用phpadmin运行

1.本文实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,最好的办法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 类来实现。不但速度快,而且代码简单,下面测试代码导入一个6万多条数据的sheet,包括读取(全部读取比较慢)在我的开发环境中只需要10秒左右,而真正的导入过程只需要4.5秒。\x0d\x0a2.代码如下:\x0d\x0ausing System \x0d\x0ausing System.Data \x0d\x0ausing System.Windows.Forms \x0d\x0ausing System.Data.OleDb \x0d\x0anamespace WindowsApplication2 \x0d\x0a{ \x0d\x0apublic partial class Form1 : Form \x0d\x0a{ \x0d\x0apublic Form1() \x0d\x0a{ \x0d\x0aInitializeComponent() \x0d\x0a} \x0d\x0a\x0d\x0aprivate void button1_Click(object sender, EventArgs e) \x0d\x0a{ \x0d\x0a//测试,将excel中的sheet1导入到sqlserver中 \x0d\x0astring connString = "server=localhostuid=sapwd=sqlgisdatabase=master" \x0d\x0aSystem.Windows.Forms.OpenFileDialog fd = new OpenFileDialog() \x0d\x0aif (fd.ShowDialog() == DialogResult.OK) \x0d\x0a{ \x0d\x0aTransferData(fd.FileName, "sheet1", connString) \x0d\x0a} \x0d\x0a} \x0d\x0a\x0d\x0apublic void TransferData(string excelFile, string sheetName, string connectionString) \x0d\x0a{ \x0d\x0aDataSet ds = new DataSet() \x0d\x0atry\x0d\x0a{ \x0d\x0a//获取全部数据 \x0d\x0astring strConn = "Provider=Microsoft.Jet.OLEDB.4.0" + "Data Source=" + excelFile + "" + "Extended Properties=Excel 8.0" \x0d\x0aOleDbConnection conn = new OleDbConnection(strConn) \x0d\x0aconn.Open() \x0d\x0astring strExcel = "" \x0d\x0aOleDbDataAdapter myCommand = null \x0d\x0astrExcel = string.Format("select * from [{0}$]", sheetName) \x0d\x0amyCommand = new OleDbDataAdapter(strExcel, strConn) \x0d\x0amyCommand.Fill(ds, sheetName) \x0d\x0a\x0d\x0a//如果目标表不存在则创建 \x0d\x0astring strSql = string.Format("if object_id('{0}') is null create table {0}(", sheetName) \x0d\x0aforeach (System.Data.DataColumn c in ds.Tables[0].Columns) \x0d\x0a{ \x0d\x0astrSql += string.Format("[{0}] varchar(255),", c.ColumnName) \x0d\x0a} \x0d\x0astrSql = strSql.Trim(',') + ")" \x0d\x0a\x0d\x0ausing (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connectionString)) \x0d\x0a{ \x0d\x0asqlconn.Open() \x0d\x0aSystem.Data.SqlClient.SqlCommand command = sqlconn.CreateCommand() \x0d\x0acommand.CommandText = strSql \x0d\x0acommand.ExecuteNonQuery() \x0d\x0asqlconn.Close() \x0d\x0a} \x0d\x0a//用bcp导入数据 \x0d\x0ausing (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString)) \x0d\x0a{ \x0d\x0abcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied) \x0d\x0abcp.BatchSize = 100//每次传输的行数 \x0d\x0abcp.NotifyAfter = 100//进度提示的行数 \x0d\x0abcp.DestinationTableName = sheetName//目标表 \x0d\x0abcp.WriteToServer(ds.Tables[0]) \x0d\x0a} \x0d\x0a} \x0d\x0acatch (Exception ex) \x0d\x0a{ \x0d\x0aSystem.Windows.Forms.MessageBox.Show(ex.Message) \x0d\x0a}\x0d\x0a} \x0d\x0a\x0d\x0a//进度显示 \x0d\x0avoid bcp_SqlRowsCopied(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e) \x0d\x0a{ \x0d\x0athis.Text = e.RowsCopied.ToString() \x0d\x0athis.Update() \x0d\x0a}\x0d\x0a} \x0d\x0a} \x0d\x0a3.上面的TransferData基本可以直接使用,如果要考虑周全的话,可以用oledb来获取excel的表结构,并且加入ColumnMappings来设置对照字段,这样效果就完全可以做到和sqlserver的dts相同的效果了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6424749.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-22
下一篇 2023-03-22

发表评论

登录后才能评论

评论列表(0条)

保存