当前位置:编程学习 > C#/ASP.NET >>

如何将在前台通过单击某按钮使Excel中的数据导入到sql server数据库中?

sql server数据库中有表a,字段有“代号”、“书名”、“价格”。
某磁盘下有名为b的Excel文件,其内容是:
代号     书名     价格
101      数据库    35
102      C语言     29
103      vb.net    27

请问如何在web窗体中单击某按钮,如“导入”,使b中的数据导入到a中??? --------------------编程问答-------------------- excel文件在客户端还是服务器端?

如果在客户端,先要选择文件,然后上传,最后导入

导入可连接excel作为一个数据库,查询数据然后写入数据库.
--------------------编程问答-------------------- excel文件是在服务器端的,请问能用代码实现吗? --------------------编程问答-------------------- 用oledb连接

"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=True;Data Source=d:\aa.xls;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""
--------------------编程问答-------------------- 请问可不可以像windows界面那样,先选择某个excel文件再按“导入”按钮就将excel表中的记录导入到sql数据库中的a表中?也就是说excel文件不是固定放在某个磁盘的某个文件夹下的。 --------------------编程问答-------------------- string strCon="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("../xls_bang/bang.xls")+";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
    OleDbConnection oleCon=new OleDbConnection(strCon);
    OleDbDataAdapter oleDA=new OleDbDataAdapter("select * from [Sheet1$]",oleCon);
    DataSet ds=new DataSet();
    oleDA.Fill(ds);

dataAdapter.SelectCommand.CommandText="updatesql";
SqlCommandBuilder cmdBuilder=new SqlCommandBuilder(dataAdapter);
dataAdapter.UpdateCommand=cmdBuilder.GetUpdateCommand();
dataAdapter.Update(ds); --------------------编程问答-------------------- oh,make a mistake --------------------编程问答-------------------- 学习! --------------------编程问答-------------------- 该回复被版主删除 --------------------编程问答-------------------- 我用如下sql语句时:
insert into a
select *  
from OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="e:\b.xls";
User ID=Admin;Password=;Extended properties=Excel 8.0')...[Sheet1$]
执行后怎么在sql数据库中看a表时“书名”和“价格”下的记录全都掉换了!?
即“书名”字段下的记录导入的是“价格”字段的记录,而“价格”字段下的记录导入的却是
“书名”字段的记录!
what's the matter?! --------------------编程问答-------------------- 怎么会掉换数据了呢??? --------------------编程问答-------------------- 顶,学习一下 --------------------编程问答-------------------- Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Adapter_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:FileUpload ID="FileUpload1" runat="server" />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="上传导入" />
        <br />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="FileUpload1"
            Display="Dynamic" ErrorMessage="请选择要上传导入的.xls格式文件。"></asp:RequiredFieldValidator><br />
        <asp:Label ID="Label1" runat="server" Text=""></asp:Label><br />
        <br />
        <%--<asp:Image ID="Image1" runat="server" />--%><br />
        <br />
        </div>
    </form>
</body>
</html>

Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Adapter_Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string name = FileUpload1.FileName;
        string size = FileUpload1.PostedFile.ContentLength.ToString();
        string type = FileUpload1.PostedFile.ContentType;
        string type2 = name.Substring(name.LastIndexOf(".") + 1);
        string ipath = Server.MapPath("..\\upimg") + "\\" + name;
        string fpath = Server.MapPath("..\\upfile") + "\\" + name;
        string wpath = "..\\upimg\\" + name;

        if (type2 == "xls")
        {
            FileUpload1.SaveAs(fpath);
            //Image1.ImageUrl = wpath;
            Label1.Text = "你传的文件名称是:" + name + "<br>文件大小为:" + size + "字节<br>文件类型是:" + type + "<br>后缀名是:" + type2 + "<br>实际路径是:" + ipath + "<br>虚拟路径是:" + wpath;
            Response.Redirect("index.asp?filename=" + name);
        }
        else
        {
            //Image1.Visible = false;
            //FileUpload1.SaveAs(fpath);
            Label1.Text = "<font color=red>请你选择.Microsoft Office Excel文件,格式为.xls。</font>";
        }

        
        //读取XLS数据

        


    }
}

index.asp:

<%@language=vbscript codepage=936 %>
<%
option explicit
response.buffer=true
Server.ScriptTimeOut =100
%>
<%
dim conn1,rs1,sql1  
Set conn1 = Server.CreateObject("ADODB.Connection")
conn1.open "driver={SQL Server};server=zg; uid=zg;pwd=123456;database=SOU"

DIM connXLS,rsXLS,iXLS,sqlXLS
iXLS=0
dim Filenamestr
Filenamestr="../Upfile/"&request("filename")
Set connXLS =Server.CreateObject("ADODB.Connection")
connXLS.open "Driver={Microsoft Excel Driver (*.xls)};DBQ="&Server.MapPath(""&filenamestr&"")
Set rsXLS=Server.CreateObject("ADODB.Recordset")
sqlXLS="Select * From [sheet1$] order by jgmc"
Set rsXLS=connXLS.Execute(sqlXLS)

dim jgdm,jgmc


IF RsXLS.Eof And RsXLS.Bof Then
    Response.write "没有找到您需要的数据!!"
Else
    Do While Not RsXLS.EOF
 
   'Q1代码是否为空
   
   if  trim(RsXLS("jgdm"))<>"" then   '非规则判断,定义问题,进入RuleA表对比
   
       'response.write "<font color=green>合格数据列表:"&RsXLS("jgmc")&"</font><p>"
       jgdm=trim(RsXLS("jgdm"))
   jgmc=trim(RsXLS("jgmc"))
   call InputJGDM()  '把合格记录后加入库  
   else 
       dim rsRuleA,sqlRuleA
   set rsRuleA=server.createobject("adodb.recordset")
               sqlRuleA="select * from RuleA where jgmc='"&RsXLS("jgmc")&"'"
   rsRuleA.open sqlRuleA,conn1,1,3
   'do while rsRuleA.eof 
   if not rsRuleA.eof then '判断规则表是否有对应的问题解决记录
   jgdm=rsRuleA("jgdm")
   jgmc=rsRuleA("jgmc")
   call InputJGDM()    '把问题记录正规化后加入库
   rsRuleA.close
   set rsRuleA=nothing
   'response.write "<font color=red>非合格数据列表:"&RsXLS("jgmc")&"</font><p>"
   else
   response.write "<p><font color=blue>待正规化数据:"
   response.write RsXLS("jgmc")&"<p></font><a href=add.aspx>添加规则</a>"
   end if
       
   end if
   
'Q2是否代码为空与规则A表对比自检 


       iXLS=iXLS+1
       RsXLS.MoveNext
    Loop
End IF

response.write "<p>成功导入"&iXLS&"条数据"


conn1.close
set conn1=nothing
RsXLS.close
SET RsXLS=NOTHING
connXLS.close
set connXLS=nothing






'合格数据写入表开始子过程式
sub InputJGDM()   
   DIM rsJGDM,sqlJGDM
   set rsJGDM=server.createobject("adodb.recordset")
   sqlJGDM="select * from jgdm where jgdm='"&jgdm&"'"
   rsJGDM.open sqlJGDM,conn1,1,3
   if rsJGDM.eof then
   rsJGDM.addnew
   end if
   rsJGDM("jgdm")=jgdm
   rsJGDM("jgmc")=jgmc
     
   rsJGDM.update 
   rsJGDM.close
   set rsJGDM=nothing    
end sub   
'写入表结束

%>

说明:
以上三个文件为:default.aspx上传界面,default.aspx.cs处理
传参数到index.asp(注意asp文件,c#编码不是很熟悉所以用这法了,希望有人把他变更)
数据库字段要整理一下。
在index.asp文件中由于我的际实业务需要加正规处理问题,你可以删除。

--------------------编程问答-------------------- oo --------------------编程问答-------------------- 学习咯`
--------------------编程问答-------------------- cpp2017(慕白兄)正解 --------------------编程问答-------------------- #region 模板导出,导入处理

    //*****下载己选择的单机模版
    protected void btnDownDJJBXXTempt_ServerClick(object sender, EventArgs e)
    {
        //*****单机要素编号
        string DJYSBHDBParamtes = "";

        //*****引用Excel类库
        UFIDAFramework.CommonLibrary.Reports.ExcelAccess.ExcelAccess mExcelAccess = new UFIDAFramework.CommonLibrary.Reports.ExcelAccess.ExcelAccess();

        //****打开Excel处理
        mExcelAccess.Open();

        //****3、设置字体大小
        System.Drawing.Font font = new System.Drawing.Font("黑体", 21, FontStyle.Bold);
        System.Drawing.Font pFont = new System.Drawing.Font("宋体", 12, FontStyle.Regular);

        //****6、表单报表表头,同时写入报表表头数据
        mExcelAccess.MergeCells(1, 1, 1, 10);
        mExcelAccess.SetFont(1, 1, 1, 10, font);
        mExcelAccess.SetCellText(1, 1, 1, 10, "单机扩展信息");

        //******合并行处理

        //*****造册号
        mExcelAccess.MergeCells(2, "A", 3, "A");
        mExcelAccess.SetCellText(2, "A", 3, "A", "造册号");

        //*****别号
        mExcelAccess.MergeCells(2, "B", 3, "B");
        mExcelAccess.SetCellText(2, "B", 3, "B", "别号");

        //*****引进方式
        mExcelAccess.MergeCells(2, "C", 3, "C");
        mExcelAccess.SetCellText(2, "C", 3, "C", "引进方式");

        //*****获取单机基本信息
        DataSet DSet = new DataSet();

        string DBParamtes = DelValue.Value;

        //*****设置第四行的第一列为单机编号
        mExcelAccess.SetCellText(1, "HO", DBParamtes);
        mExcelAccess.SetColumnWidth("HO", 100f);

        //*****设置第四行高度为0
        mExcelAccess.SetRowHeight(4, 0);

        string[] F_DJJBXXBH = DBParamtes.Split(',');

        //****获取单机相应信息
        DSet = (new ServiceProxy.Service()).DJ_JBXX_Base_Filter(" AND F_DJJBXXBH='" + F_DJJBXXBH[0] + "' AND F_ISDELETE=1");

        //*****获取单机模版编号
        DataTable DJMBDTable = DSet.Tables[0];

        if (DJMBDTable.Rows.Count > 0)
        {
            DataRow DJMBDRow = DJMBDTable.Rows[0];

            //*****获取单机模版编号
            string F_DJMBBH = DJMBDRow["F_DYMBBH"].ToString();

            //*****获取单机分类信息
            DataTable DJFLDTable = new DataTable();
            DJFLDTable = (new ServiceProxy.Service()).DJ_DYFL_Base_Filter(" AND F_DYMBBH='" + F_DJMBBH + "' AND F_ISDELETE=1 ORDER BY F_FLXH ASC ").Tables[0];

            //****重新第二行的第4列开始输入单机分类信息
            int colIndex = 3;
            int endColindex = 3;
            int DJYSSColIndex = 3;

            //****输入单机分类标题
            foreach (DataRow dRow in DJFLDTable.Rows)
            {
                //****构造表头处理
                colIndex++;
                endColindex++;
--------------------编程问答--------------------
                //****获取单机分类编号
                string F_DJDYFLBH = dRow["F_DJDYFLBH"].ToString();

                //****得到单机分类要素总的个数
                DataTable DJYSDTable = (new ServiceProxy.Service()).DJ_DYYS_Base_Filter(" AND F_DJDYFLBH='" + F_DJDYFLBH + "' AND F_IsDelete=1 order by F_DJDYYSBH asc").Tables[0];

                //*****得到单机分类要素列数
                int DJYSSCount = DJYSDTable.Rows.Count;

                //*****合并行处理,同时设置合并行的相应分类信息
                mExcelAccess.MergeCells(2, colIndex, 2, (colIndex + DJYSSCount) - 1);
                mExcelAccess.SetCellText(2, colIndex, 2, (colIndex + DJYSSCount) - 1, dRow["F_DJDYFLMC"].ToString());

                //****单机要素信息
                foreach (DataRow DJYSSDRow in DJYSDTable.Rows)
                {
                    DJYSSColIndex++;
                    //****单机要素名称
                    mExcelAccess.SetCellText(3, DJYSSColIndex, DJYSSDRow["F_YSMC"].ToString());

                    //****单机要素编号
                    mExcelAccess.SetCellText(4, DJYSSColIndex, DJYSSDRow["F_DJDYYSBH"].ToString());

                    if (DJYSBHDBParamtes == "")
                    {
                        DJYSBHDBParamtes = DJYSSDRow["F_DJDYYSBH"].ToString();

                    }
                    else
                    {
                        DJYSBHDBParamtes += "," + DJYSSDRow["F_DJDYYSBH"].ToString();
                    }


                }

                //*****计算合并行数处理
                endColindex = (endColindex + DJYSSCount) - 1;
                colIndex = (colIndex + DJYSSCount) - 1;

            }

            //*****设置第四行的第一列为单机编号
            mExcelAccess.SetCellText(1, "IQ", "'" + DJYSBHDBParamtes + "'");
            //mExcelAccess.SetColumnWidth("IQ", 255f);

        }


        //*****加载数据处理
        int rowIndex = 5;

        foreach (string DJJBXXBH in F_DJJBXXBH)
        {
            if (DJJBXXBH != "")
            {
                DataSet MBDSet = new DataSet();

                //****获取单机相应信息
                MBDSet = (new ServiceProxy.Service()).DJ_JBXX_Base_Filter(" AND F_DJJBXXBH='" + DJJBXXBH + "' AND F_ISDELETE=1");

                //*****循环加载选择己有的单机数据集
                foreach (DataRow DJMBDRow in MBDSet.Tables[0].Rows)
                {
                    //*****造册号
                    mExcelAccess.SetCellText(rowIndex, "A", rowIndex, "A", DJMBDRow["F_ZUCH"].ToString());
                    //*****别号
                    mExcelAccess.SetCellText(rowIndex, "B", rowIndex, "B", DJMBDRow["F_BH"].ToString());

                    //*****引进方式
                    mExcelAccess.SetCellText(rowIndex, "C", rowIndex, "C", ConvertYJFS(Convert.ToInt32(DJMBDRow["F_YJFS"].ToString())));

                    //*****加载单机要素数据哈

                    //*****获取单机模版编号
                    string F_DJMBBH = DJMBDRow["F_DYMBBH"].ToString();

                    //*****获取单机分类信息
                    DataTable DJFLDTable = new DataTable();
                    DJFLDTable = (new ServiceProxy.Service()).DJ_DYFL_Base_Filter(" AND F_DYMBBH='" + F_DJMBBH + "' AND F_ISDELETE=1 ORDER BY F_FLXH ASC ").Tables[0];

                    //*****从第三行开始读取数据
                    int DJYSSColIndex = 3;

                    //****输入单机分类标题
                    foreach (DataRow dRow in DJFLDTable.Rows)
                    {
                        //****获取单机分类编号
                        string F_DJDYFLBH = dRow["F_DJDYFLBH"].ToString();

                        //****得到单机分类要素总的个数
                        DataTable DJYSDTable = (new ServiceProxy.Service()).DJ_DYYS_Base_Filter(" AND F_DJDYFLBH='" + F_DJDYFLBH + "' AND F_IsDelete=1 order by F_DJDYYSBH asc").Tables[0];

                        //****单机要素信息
                        foreach (DataRow DJYSSDRow in DJYSDTable.Rows)
                        {
                            DJYSSColIndex++;

                            //*****构造查询条件s
                            string strSQL = " AND F_DJJBXXBH='" + DJJBXXBH + "' AND F_DJDYYSBH='" + DJYSSDRow["F_DJDYYSBH"].ToString() + "'";

                            DataSet DJYSSJDSet = (new ServiceProxy.Service()).DJ_YSSJ_Base_Filter(strSQL);

                            if (DJYSSJDSet.Tables[0].Rows.Count > 0)
                            {
                                DataRow DJYSSJDRow = DJYSSJDSet.Tables[0].Rows[0];
                                //****单机要素名称
                                mExcelAccess.SetCellText(rowIndex, DJYSSColIndex, DJYSSJDRow["F_YSSJ"].ToString());
                            }
                        }

                    }

                    rowIndex++;

                }

            }

        }


        //****8、画边框及网格线
        //mExcelAccess.SetBordersEdge(1, 1, dTable.Rows.Count - 1, dTable.Rows.Count, false);

        //****9、下载文件
        //****构造文件名
        string FileName = UFIDAFramework.CommonLibrary.DevelopLibrary.Develops.Strings.BulidAutoDateCode(4);

        //****保存文件到导出文件临时目录中
        string mDirecotrPath = "..\\UploadFile\\DJJBXXTempte\\Excel";

        //****获取文件夹路径
        string DirecotrPath = Server.MapPath(mDirecotrPath);

        if (Directory.Exists(DirecotrPath) == false)
        {
            //****创建文件夹
            Directory.CreateDirectory(DirecotrPath);
        }

        string mSaveFiletPath = DirecotrPath + "\\" + FileName + ".xls";

        //****10、保存文件
        mExcelAccess.SaveAs(mSaveFiletPath, false);

        //****显示Excel
        //mExcelAccess.ShowExcel();

        font.Dispose();

        //***11、关闭报表
        mExcelAccess.Close();

        hidFilePath.Value = System.IO.Path.GetFileName(mSaveFiletPath);

        //****清空处理哈
        DelValue.Value = "";

        Page.ClientScript.RegisterStartupScript(typeof(string), "scurity", "<script>HiddProccess();</script>");

    }

--------------------编程问答-------------------- //****导入数据处理
    protected void btnInputDJJBXX_ServerClick(object sender, EventArgs e)
    {
        //*****获取要导入的文件

        //****1、获取上传的文件中径
        string mFilePath = "UploadFile/DJJBXXTempte/InputExcel/" + hidInputFilePath.Value;

        string mUploadPath = Server.MapPath("~/" + mFilePath);

        //****2、验证文件是否存在
        if (File.Exists(mUploadPath) == false)
        {
            return;
        }

        //****调用开发库类
        UFIDAFramework.CommonLibrary.Reports.ExcelAccess.ExcelAccess mExcelAccess = new UFIDAFramework.CommonLibrary.Reports.ExcelAccess.ExcelAccess();

        //****3、打开Excel文件
        mExcelAccess.Open(mUploadPath);

        //****4、读取Excel单元格数据
        Excel.Range strDJJBXXBH = mExcelAccess.GetRange(1, "HO");
        Excel.Range strDJYSBH = mExcelAccess.GetRange(1, "IQ");

        //****5、得到单机基本信息编号
        string mF_DJJBXXBH = (string)strDJJBXXBH.Text;
        string DJYSBHDBParamtes = (string)strDJYSBH.Text.ToString().Replace("'", "").Replace("'", "");


        //****6、导入文件格式不正确,就退出
        if (mF_DJJBXXBH == "" || DJYSBHDBParamtes == "")
        {
            Page.ClientScript.RegisterStartupScript(typeof(string), "msg", "<script>alert('导入文件模版格式不正确,请重新选择!');</script>");
            return;
        }

        //****7、重第4行开始读取数据
        int intRow = 5;

        int rowIndex = 0;

        do
        {
            //****获得前三个单元格的值
            string strF_ZCH = "";
            string strF_BH = "";
            int strF_YJFS = 1;
            string F_DJJBXXBH = "";
            string DBParamtes = "";

            string[] DJDBParamtes = mF_DJJBXXBH.Split(',');

            //****获取处理哈
            F_DJJBXXBH = DJDBParamtes[rowIndex];
            //****获取相应数据
            strF_ZCH = mExcelAccess.GetCellText(intRow, 1);
            strF_BH = mExcelAccess.GetCellText(intRow, 2);
            strF_YJFS =YJFSConvert(mExcelAccess.GetCellText(intRow, 3));

            //*****构造单机基本信息编号
            string BulidDJJBXXDBParamtes = F_DJJBXXBH + "~" + strF_ZCH + "~" + strF_BH + "~" + strF_YJFS;

            //****11、拆分要素编号
            string[] mDJYSBH = DJYSBHDBParamtes.Split(',');

            int intColIndex = 0;

            //****8、循环获取行数据处理
            for (int i = 4; i <= mDJYSBH.Length; i++)
            {
                intColIndex++;

                if (DBParamtes == "")
                {
                    DBParamtes = mExcelAccess.GetCellText(intRow, i) + "~" + mDJYSBH[intColIndex - 1].ToString();
                }
                else
                {
                    DBParamtes += "\t" + mExcelAccess.GetCellText(intRow, i) + "~" + mDJYSBH[intColIndex - 1].ToString();
                }

            }

            //****调用相应接口,更新数据处理
            bool IsSucerity = (new ServiceProxy.Service()).DJ_JBXX_ExcelInput_Interface(BulidDJJBXXDBParamtes, DBParamtes);

            if (IsSucerity == false) break;

            intRow++;

            //****获取单机基本信息编号
            rowIndex++;

        }

        while (mExcelAccess.GetCellText(intRow, 1).ToString() != "");

        //***9、关闭报表
        mExcelAccess.Close();


        //***10、删除导入文件处理
        if (File.Exists(mUploadPath)==true)
        {
            //****删除文件
            File.Delete(mUploadPath);
        }

        //***11、提示处理
        Page.ClientScript.RegisterStartupScript(typeof(string), "msg", "<script>HiddenProccessBar();</script>");

    }

    #endregion
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,