`
yangle926
  • 浏览: 58361 次
  • 性别: Icon_minigender_1
  • 来自: 洛阳
社区版块
存档分类
最新评论

实例讲解用.NET技术将Excel表格中的数据导入到特定的SQL Server数据库中

    博客分类:
  • .NET
阅读更多
    由于管理需要,公司决定上一套信息管理系统,将原来的用Excel所做的记录用管理系统来管理。通过努力,我终于作了一套类似《牛腩新闻发布系统》的客户信息管理系统。可原来的Excel中的数据该如何导入到新的系统中呢。通过两天的不断研习我终于搞定。
    我所用的数据库是基于SQL Server 2005 Express版的,用SQL Server Management Studio Express来管理。数据库结构见图,
其中各个表的说明见图,公司现在所用的Excel数据见图
    首先要做的是将Excel表导入到SQL Server 2005下。我先将Excel导入到Access中,再将Access数据库导入到SQL Server 2000中,然后将SQL Server 2000中的数据库做备份,最后再在SQL Server 2005 Express将数据库还原。最终得到SQL Server 2005中的数据库nbk,表名userinfo,表中的字段有:
id(编号) date(安装日期) name(客户姓名) address(地址) telphone(电话) model(机型) amount(数量) acmodel(配件) inname(安装工姓名)
    剩下的工作就是要在VS中(我用的是VWD 2008 Express Edition)将库nbk中的数据导入到数据库yuajiasys中。
     准备工作:
    为了能够看到出错信息,首先打开web.config文件,将其中的容错处理语句,也就是<customErrors mode="On" defaultRedirect="~\error.htm"></customErrors>一行删除。
    我原来所用的SQLHelper.cs(在DAL层)代码如下:
    
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace DAL
{
    public class SQLHelper
    {
        private SqlConnection conn = null;
        private SqlCommand cmd = null;
        private SqlDataReader sdr = null;

        public SQLHelper()
        {
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            conn = new SqlConnection(connStr);
        }

        private SqlConnection GetConn()
        {
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }
            return conn;
        }

        public int ExecuteNonQuery(string sql, CommandType ct)
        {
            int res;
            try
            {
                cmd = new SqlCommand(sql, GetConn());
                cmd.CommandType = ct;
                res = cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
            return res;
        }

        public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct)
        {
            int res;
            using (cmd = new SqlCommand(cmdText, GetConn()))
            {
                cmd.CommandType = ct;
                cmd.Parameters.AddRange(paras);
                res = cmd.ExecuteNonQuery();
            }
            return res;
        }

        public DataTable ExecuteQuery(string cmdText, CommandType ct)
        {
            cmd = new SqlCommand(cmdText, GetConn());
            DataTable dt = new DataTable();
            cmd.CommandType = ct;
            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                dt.Load(sdr);
            }
            return dt;
        }

        public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
        {
            cmd = new SqlCommand(cmdText, GetConn());
            cmd.CommandType = ct;
            DataTable dt = new DataTable();
            cmd.Parameters.AddRange(paras);
            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                dt.Load(sdr);
            }
            return dt;
        }
    }
}

    此方法是用来操作数据库yuajiasys的。为了能够操作数据库nbk,我将SQLHelper复制了一份,命名为SQLHelper1,代码除了将SQLHelper改为SQLHelper1之外,只有一个地方要修改,那就是连接字符串,与nbk建立连接的字符串的写法:string connStr = @"server=PC2009080519VDZ\SQLEXPRESS;database=nbk;uid=sa;pwd=123456";改好之后要对DAL进行“重新生成”。
    真正操作数据的过程:
    新建一个网页copydata,前台什么也不用做,直接处理代码。具体过程如下:
    一、从数据库nbk中查出所有的机型类别名称并加入到数据库yuajiasys的类别表category中。
    直接在页面的Page_Load事件中写,具体代码:
   
string conncategory = "select distinct [model] from userinfo order by [model]";
DataTable camodel = new SQLHelper1().ExecuteQuery(conncategory, CommandType.Text);
string model;
for (int i = 0; i < camodel.Rows.Count; i++)
{
    model = camodel.Rows[i]["model"].ToString();
    new CategroyManager().Insert(model); //调用往类别名称表加添加数据的方法
}
……
//往类别名称表加添加数据的方法
public bool Insert(string Model)
{
     bool flag = false;
     string sql = "insert into category(Model) values(@Model)";
     SqlParameter[] paras = new SqlParameter[]{
        new SqlParameter("@Model",Model)
     };
     int res=sqlhelper.ExecuteNonQuery(sql,paras,CommandType.Text);
     if (res>0)
     {
        flag = true;
     }
     return flag;
}

    二、添加主表记录
     将第一步中的代码注释掉,添加如下代码:
    string conninfo = "select * from userinfo order by date";        
        DataTable dtinfo = new SQLHelper1().ExecuteQuery(conninfo,CommandType.Text);
	   UserInfo usinfo = new UserInfo(); //UserInfo是客户信息实体类
        for (int i = 0; i < dtinfo.Rows.Count; i++)  //根据界面的错误提示,不断修改执行循环的起始值和结束值,至到将数据全部复制完成。一次循环不应超过100
         { 
            string caid = dtinfo.Rows[i]["model"].ToString();
            switch (caid)
            {
                case "大众175升":
                    caid="1";
                    break;
                case "大众180升":
                    caid = "2";
                    break;
                case "大众210升":
                    caid = "3";
                    break;
                case "大众240升":
                    caid = "4";
                    break;
                case "大众300升":
                    caid = "5";
                    break;
                case "冬傲180升":
                    caid = "6";
                    break;
                case "冬傲210升":
                    caid = "7";
                    break;
                case "冬傲240升":
                    caid = "8";
                    break;
                case "冬傲300升":
                    caid = "9";
                    break;
                case "富康200升":
                    caid = "10";
                    break;
                case "富康240升":
                    caid = "11";
                    break;
                case "富康300升":
                    caid = "12";
                    break;
                case "富康420升":
                    caid = "13";
                    break;
                case "金刚240升":
                    caid = "14";
                    break;
                case "金刚300升":
                    caid = "15";
                    break;
                case "金刚360升":
                    caid = "16";
                    break;
                case "金刚420升":
                    caid = "17";
                    break;               
                case "我爱我家150":
                    caid = "18";
                    break;
                case "我爱我家155":
                    caid = "19";
                    break;
                case "我爱我家175":
                    caid = "20";
                    break;
                case "我爱我家180":
                    caid = "21";
                    break;
                case "我爱我家210":
                    caid = "22";
                    break;
                case "我爱我家240":
                    caid = "23";
                    break;
                case "小神童300升":
                    caid = "24";
                    break;
                case "阳光300升":
                    caid = "25";
                    break;
                case "粤佳200升":
                    caid = "26";
                    break;
                case "粤佳240升":
                    caid = "27";
                    break;
                case "粤佳300升":
                    caid = "28";
                    break;
                case "粤佳360升":
                    caid = "29";
                    break;                
                default:
                    caid = "12"; //设为富康300升所对应的ID号
                    break;
            }
            usinfo.UserName = dtinfo.Rows[i]["name"].ToString().Trim();
            usinfo.UserAddress = dtinfo.Rows[i]["address"].ToString().Trim();
            usinfo.UserTelephone = dtinfo.Rows[i]["telphone"].ToString().Trim();
            usinfo.CaId = caid;
            usinfo.InstallationDate = dtinfo.Rows[i]["date"].ToString().Trim();
            usinfo.Amount = dtinfo.Rows[i]["amount"].ToString().Trim();
            usinfo.AccessoriesModel = dtinfo.Rows[i]["acmodel"].ToString().Trim();
            usinfo.InstallationName = dtinfo.Rows[i]["inname"].ToString().Trim();
            usinfo.Notes = "";
            new UserInfoManager().Insert(usinfo);
        }
……

往客户信息表加添加数据的方法
         /// <summary>
        ///  添加新记录
         /// </summary>
        /// <param name="user">客户信息实体类</param>
        /// <returns></returns>
        public bool Insert(UserInfo user)
        {
            bool flag = false;
            string cmdText = "UserInfo_Insert";
            SqlParameter[] paras = new SqlParameter[] { 
                new SqlParameter("@userName",user.UserName),
                new SqlParameter("@userAddress",user.UserAddress),
                new SqlParameter("@userTelephone",user.UserTelephone),
                new SqlParameter("@caId",user.CaId),
                new SqlParameter("@installationDate",user.InstallationDate),
                new SqlParameter("@amount",user.Amount),
                new SqlParameter("@accessoriesModel",user.AccessoriesModel),
                new SqlParameter("@installationName",user.InstallationName),
                new SqlParameter("@notes",user.Notes)                
            };
            int res = sqlhelper.ExecuteNonQuery(cmdText,paras,CommandType.StoredProcedure);
            if (res>0)
            {
                flag = true;
            }
            return flag;
        }

实体类UserInfo.cs的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Model
{
    public class UserInfo
    {
        private string id;
        private string userName;
        private string userAddress;
        private string userTelephone;
        private string caId;
        private string installationDate;
        private string amount;
        private string accessoriesModel;
        private string installationName;
        private string notes;

        public string Id
        {
            get { return id; }
            set { id = value; }
        }
        public string UserName
        {
            get { return userName; }
            set { userName = value; }
        }
        public string UserAddress
        {
            get { return userAddress; }
            set { userAddress = value; }
        }
        public string UserTelephone
        {
            get { return userTelephone; }
            set { userTelephone = value; }
        }
        public string CaId
        {
            get { return caId; }
            set { caId = value; }
        }
        public string InstallationDate
        {
            get { return installationDate; }
            set { installationDate = value; }
        }
        public string Amount
        {
            get { return amount; }
            set { amount = value; }
        }
        public string AccessoriesModel
        {
            get { return accessoriesModel; }
            set { accessoriesModel = value; }
        }
        public string InstallationName
        {
            get { return installationName; }
            set { installationName = value; }
        }
        public string Notes
        {
            get { return notes; }
            set { notes = value; }
        }
        public UserInfo() { }
        public UserInfo(string id,string userName,string userAddress,string	userTelephone,string caId,string installationDate,string amount,string accessoriesModel,string installationName,string notes) 
        {
            this.id = id;
            this.userName = userName;
            this.userAddress = userAddress;
            this.userTelephone = userTelephone;
            this.caId = caId;
            this.installationDate = installationDate;
            this.amount = amount;
            this.accessoriesModel = accessoriesModel;
            this.installationName = installationName;
            this.notes = notes;
        }
        public UserInfo(string userName, string userAddress, string userTelephone, string caId,string installationDate, string amount, string accessoriesModel, string installationName, string notes)
        {
            this.userName = userName;
            this.userAddress = userAddress;
            this.userTelephone = userTelephone;
            this.caId = caId;
            this.installationDate = installationDate;
            this.amount = amount;
            this.accessoriesModel = accessoriesModel;
            this.installationName = installationName;
            this.notes = notes;
        }
    }
}

    说明:由于有两个与数据库的链接存在,在运行过程中会出错,好像是链接池的问题,我不太懂。我的解决办法是不断的修改循环的起始值和结束值,直止将数据全部写完。关于这点,哪位网友有好的解决办法,希望能与之交流。另外,代码中用到一些自己写的操作数据库的方法,如有不明之处,建议看看视频《牛腩新闻发布系统》。
写的比较乱,主要是讲一种思路,有不懂的地方,欢迎与本人联系交流。QQ:747386679。






  • 大小: 32.3 KB
  • 大小: 24.1 KB
  • 大小: 21.6 KB
分享到:
评论

相关推荐

    C#实现Excel导入数据到SQL Server数据库

    本教程将聚焦于使用C#编程语言实现从Excel文件批量导入数据到SQL Server数据库的过程,利用`SqlBulkCopy`类来高效地完成这一任务。 首先,`SqlBulkCopy`是.NET Framework中的一个强大工具,它提供了将大量数据一次...

    ASP.NET+SQL Server 数据库开发与实例 光盘

    本书选材新颖,实例涵盖范围广,具有一定的实用价值,通过本书的学习,可以使读者更好地掌握ASP.NET和SQL Server开发数据库应用程序技术,并将这些技术应用到实际的软件开发工程中。 本书适用于具有一定Web应用程序...

    ASP.NET + SQL Server数据库开发实例

    在"ASP.NET + SQL Server数据库开发实例"中,我们可以学习到以下几个关键知识点: 1. **ASP.NET基础知识**:ASP.NET提供了一系列的控件和模型,如Web Forms、MVC和Web API,帮助开发者快速构建网页应用。Web Forms...

    C#将数据导入excel和Excel数据导入数据库

    本主题聚焦于如何利用C#处理Excel文件,并将其数据导入到SQL Server数据库中。这一过程通常涉及到两个主要步骤:读取Excel数据和与数据库进行交互。 首先,我们来看C#读取Excel数据的部分。在.NET框架中,可以使用...

    (VB.net 连接 SQL server数据库案例源码)数据收纳箱系统.zip

    (VB.net 连接 SQL server数据库案例源码)数据收纳箱系统.zip 源码开放,datagridview1控件列示等等

    ASP NET链接SQLServer数据库程序 含有数据库文件

    在给定的压缩包文件中,包含了一个使用ASP.NET连接到SQL Server数据库的程序实例,这将帮助我们深入理解如何在实际开发中处理数据库交互。 首先,让我们来看看ASP.NET如何与SQL Server进行连接。在ASP.NET中,我们...

    Excel导入SQLserver源码_excel2sql.zip

    当我们需要将Excel中的数据导入到SQL Server时,手动操作可能会非常耗时且容易出错。因此,有了"Excel导入SQLserver源码_excel2sql.zip"这样的工具或代码,可以极大地提高工作效率。 这个压缩包文件"Excel导入SQL...

    将txt与excel文件导入SQLServer数据库的sql代码

    在数据库操作中,经常需要将外部文件如txt和excel文件中的数据导入到SQL Server数据库中,以实现数据的批量迁移和更新。以下内容详细介绍了如何使用SQL Server中的BULK INSERT语句将txt和excel文件中的数据导入SQL ...

    asp.net(c#)excel数据导入Sql2005

    在ASP.NET(C#)开发中,经常需要处理从Excel文件导入数据到SQL Server 2005这样的任务。这个过程涉及到多个技术层面,包括文件读取、数据处理和数据库交互。下面将详细介绍这个过程中的关键知识点。 首先,我们需要...

    dbf文件导入SQL server

    本主题聚焦于如何将DBF(dBase文件格式)导入到SQL Server数据库,并将数据导出至本地Excel。DBF是一种早期的数据库文件格式,常用于FoxPro、dBase等系统,而SQL Server是微软提供的一个强大、可靠的关系型数据库...

    直接使用SQL语句读取Excel表格内容,把表中内容导入数据库中

    根据给定的文件信息,我们可以深入探讨如何使用SQL语句直接读取Excel表格内容,并将这些数据导入到数据库中。这一技术在数据迁移、数据整合以及报表自动化等场景下非常实用。下面,我们将详细解析这一过程中的关键...

    vb.net+sqlserver数据库开发.rar

    通过学习这些章节,开发者将能掌握如何在VB.NET中使用SQL Server进行数据操作,包括创建数据库连接、执行SQL命令、填充数据集、更新数据库以及处理异常。同时,也能了解到如何设计和实施数据库,以及如何通过VB.NET...

    《Visual C++ + SQL Server数据库应用系统开发与实例》代码

    《Visual C++ + SQL Server数据库应用系统开发与实例》是一本深入探讨如何使用Microsoft的C++编程语言结合SQL Server数据库进行应用系统开发的书籍。这本书的配套源码提供了丰富的实例,帮助读者理解并实践C++与...

    C++使用ADO连接SQL Server数据库源代码

    以下将详细讲解如何使用C++通过ADO连接到SQL Server数据库,并基于提供的"ConnDatabase"源代码进行学习。 1. ADO简介:ADO是微软的组件对象模型(COM)接口,它提供了一种简单的方式来访问各种数据源,包括SQL ...

    ASP.NET中新建MVC项目并连接SqlServer数据库实现增删改查示例代码.zip

    ASP.NET中新建MVC项目并连接SqlServer数据库实现增删改查: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/107024544

    C#实现Excel表数据导入Sql Server数据库中的方法

    本文实例讲述了C#实现Excel表数据导入Sql Server数据库中的方法。分享给大家供大家参考,具体如下: Excel表数据导入Sql Server数据库的方法很多,这里只是介绍了其中一种: 1、首先,我们要先在test数据库中新建一...

    ASP.NET源码——Excel导入SQLserver源码.zip

    此压缩包"ASP.NET源码——Excel导入SQLserver源码.zip"提供了一种实现Excel数据导入到SQL Server数据库的方法,这对于数据分析、报表生成或者批量数据处理场景非常有用。 在ASP.NET中,我们通常会使用第三方库如...

    Visual C++ + SQL Server数据库开发与实例(随书光盘)

    在后面章节中,将通过使用Visual C++进行的实例开发来帮助读者掌握和巩固SQL Server的使用方法和技巧。 第3章讲解了数据库基础及SQL语言。从回顾数据库的发展历程开始,简单介绍了数据库的分类和操作方式,并对...

    SQLSERVER表导入EXCEL 小工具

    总的来说,"SQLSERVER表导入EXCEL小工具"是一个方便的桥梁,它利用.NET的Interop技术,有效地将SQL Server的强大数据库功能与Excel的分析和展示能力相结合,为数据处理提供了一个高效且用户友好的解决方案。...

    ASP.NET+SQL Server 数据库开发与实例源码

    ASP.NET和SQL Server是两种广泛应用于web开发的技术。ASP.NET是由微软公司开发的服务器端编程框架,用于构建功能丰富的、高性能的web应用程序。而SQL Server则是一款强大的关系型数据库管理系统,用于存储、管理和...

Global site tag (gtag.js) - Google Analytics