怎么将exel表中数据存入到数据库

怎么将exel表中数据存入到数据库,第1张

将excle表中数据存入到数据库的方法步骤如下:

1、打开SQL Server Management Studio,按图中的路径进入导入数据界面。

2、导入的时候需要将EXCEL的文件准备好,不能打开。点击下一步。

3、数据源:选择“Microsoft Excel”除了EXCEL类型的数据,SQL还支持很多其它数据源类型。

4、选择需要导入的EXCEL文件。点击浏览,找到导入的文件确定。

5、再次确认文件路径没有问题,点击下一步。

6、默认为是使用的WINODWS身份验证,改为使用SQL身份验证。输入数据库密码,注意:数据库,这里看看是不是导入的数据库。也可以在这里临时改变,选择其它数据库。

7、选择导入数据EXCEL表内容范围,若有几个SHEET表,或一个SHEET表中有些数据我们不想导入,则可以编写查询指定的数据进行导入。点击下一步。

8、选择我们需要导入的SHEET表,比如我在这里将SHEET表名改为price,则导入后生面的SQL数据库表为price$。点击进入下一步。

9、点击进入下一步。

10、在这里完整显示了我们的导入的信息,执行内容,再次确认无误后,点击完成,开始执行。

11、可以看到任务执行的过程和进度。

12、执行成功:我们可以看看执行结果,已传输1754行,表示从EXCEL表中导入1754条数据,包括列名标题。这样就完成了,执行SQL查询语句:SELECT * FROM price$就可以查看已导入的数据内容。

其实这个就跟C#连接SQL读取表中的数据是一样的,只是在这数据库为Excel而已,通过连接字符串:

Provider=Microsoft.Jet.OLEDB.4.0Data Source=文件路径Extended Properties=Excel 8.0

连接Excel即可,然后通过SQL语句:(类似)select * from [Sheet1$] 把数据取出来即可,然后按照以前自己连接SQL数据库的方式把相应的字段存储起来即可。

需要留意的时03和07的连接字符串不一样,以上是03版的Excel连接方式

Excel 2007:

Provider=Microsoft.ACE.OLEDB.12.0Data Source=文件路径Extended Properties=Excel 12.0

如有什么不明白的 可以留言 ^_^

using System

using System.Collections.Generic

using System.Linq

using System.Web

using System.Web.UI

using System.Web.UI.WebControls

using System.Data

using System.Collections

using System.Windows.Forms

using System.Data.OleDb

using System.Data.Common

using System.Data.SqlClient

public partial class Excel导入_Default : System.Web.UI.Page

{

    private static string filename

    private static string savePath

    private static DataSet ds //要插入的数据

    private static DataTable dt

    protected void Page_Load(object sender, EventArgs e)

    {

    }

    //上传文件到指定的服务器

    protected void Button1_Click1(object sender, EventArgs e)

    {

        filename = this.fileUploadExcel.FileName

        //savePath必须包含表名在内的所有路径名

        savePath = @"G:\项目组文件\项目.net学习资料\工程\Health\Excel导入\Files\" + this.fileUploadExcel.FileName    //上传服务器文件的存储,存在当前新建的文件夹

        this.fileUploadExcel.SaveAs(savePath)

        Boolean judge_excel = Judge_Excel()

        if (!judge_excel)

        {

            MessageBox.Show("上传的不是excel文件", "标题", MessageBoxButtons.OKCancel, MessageBoxIcon.Error)

            return

        }

        else

            MessageBox.Show("上传文件成功", "标题", MessageBoxButtons.OKCancel, MessageBoxIcon.Information)

        //测试,将excel中的sheet1导入到sqlserver中   

        //string connString = "server=localhostuid=sapwd=sqlgisdatabase=master"

        //System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog()

        //if (fd.ShowDialog() == DialogResult.OK)

        //{

        //    //TransferData(fd.FileName, "sheet1", connString)

        //}

    }

    //判断文件是否是excel文件函数

    protected Boolean Judge_Excel()

    {

        string fileExtend = System.IO.Path.GetExtension(this.fileUploadExcel.FileName)

        if (fileExtend == ".xlsx" || fileExtend == ".xls")

            return true

        else

            return false

    }

    //获取excel数据按钮的触发,

    protected void Button2_Click(object sender, EventArgs e)

    {

        ExcelToDataSet()

        MessageBox.Show("获取数据成功", "标题", MessageBoxButtons.OKCancel, MessageBoxIcon.Information)

    }

    //从excel表中获取数据的函数

    public void ExcelToDataSet()

    {

        string strConn = "Provider = Microsoft.Jet.OLEDB.4.0  Data Source = " + savePath + "Extended Properties=\"Excel 8.0HDR=YesIMEX=1\""

        OleDbConnection conn = new OleDbConnection(strConn) //连接excel            

        if (conn.State.ToString() == "Open")

        {

            conn.Close()

        }

        conn.Open()    //外部表不是预期格式,不兼容2010的excel表结构

        string s = conn.State.ToString()

        OleDbDataAdapter myCommand = null

        ds = null

        /*DataTable yTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new Object[] { null, null, null, "TABLE" })//获取表的框架,几行几列

        string tableName = yTable.Rows[0]["filename"].ToString() //表示的是几行几列  

        string strSel = "select * from [" + filename + "]"//xls */

        string strExcel = "select * from [sheet1$]"  //如果有多个sheet表时可以选择是第几张sheet表    

        myCommand = new OleDbDataAdapter(strExcel, conn)//用strExcel初始化myCommand,查看myCommand里面的表的数据??

        ds = new DataSet()

        myCommand.Fill(ds)     //把表中的数据存放在ds(dataSet)

        conn.Close()

        try

        {

            dt = ds.Tables[0]

            this.dataGridView1.DataSource = dt

        }

        catch (Exception err)

        {

            MessageBox.Show(" *** 作失败!" + err.ToString())

        }

    }

    //excel导入数据库sql的按钮触发

    protected void Button3_Click(object sender, EventArgs e)

    {

        //string path = @"D:\数据库SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Test.mdf"

        string connString = "server=localhostuid=sapwd=1234database=Test"   //连接数据库的路径方法

        //String connString=@"server=localhostuid=sapwd=1234database=D:\数据库SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\Test.mdf"

        SqlConnection conn = new SqlConnection(connString)

        conn.Open()

        DataRow dr = null

        int C_Count = dt.Columns.Count//获取列数

        for (int i = 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.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connString))

        {

            bcp.SqlRowsCopied += new System.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)

    }*/

    //插入数据库的函数

    protected void insertToSql(DataRow dr, int column_count, SqlConnection conn)

    {

        //excel表中的列名和数据库中的列名一定要对应  

        string name = dr[0].ToString()//需要把内个列都列出来

        string age = dr[1].ToString()

        string sex = dr[2].ToString()

        //当数据库中有多个表时,怎么分辨插入的表

        string sql = "insert into 客户 values('" + name + "','" + age + "','" + sex + "')"

        SqlCommand cmd = new SqlCommand(sql, conn)

        cmd.ExecuteNonQuery()

    }

    //从excel表中获取数据并存在

    //    protected void ImportFromExcel()

    //    {

    //        string execelConnectionStr = @"Provider=Microsoft.Jet.OLEDB.4.0Data Source=filename

    //        Extended Properties=""Excel 8.0HDR=YESIMEX=1\"""//表第一行是标题,不做为数据使用, Excel 档案只能用来做“读取”用途。

    //        ds = new DataSet()

    //        string connString = "Provider = Microsoft.Jet.OLEDB.4.0  Data Source = " 

    //            + savePath + "Extended Properties=\"Excel 8.0HDR=YesIMEX=1\""

    //        DataTable table = OleDbHelper.GetExcelTables(connString)

    //        if (table == null || table.Rows.Count <= 0)

    //        {

    //            return

    //        }

    //        foreach (DataRow dr in table.Rows)

    //        {

    //            string cmdText = "select * from [" + dr["TABLE_NAME"].ToString() + "]"

    //            DataTable dt = OleDbHelper.FillDataTable(connString, cmdText)

    //            dt.TableName = dr["TABLE_NAME"].ToString()

    //            ds.Tables.Add(dt)

    //        }

    //    }

}


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

原文地址: http://outofmemory.cn/sjk/6892320.html

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

发表评论

登录后才能评论

评论列表(0条)

保存