asp.net/c#代码实现excel to mssql数据导入

 做网站项目时,可能会遇到将excel文件中的数据导入至sql server数据库的需求,把excel也看作数据库,使用OleDb连接后读取数据然后写入用SqlClient连接的sql server数据库即可,技术上没有什么难度。

     但是需要考虑的一个问题是,系统安装的环境一般是专用sql server服务器+web服务器+客户端,而excel文件往往在客户端导入,如果直接使用sql语句读取的话,由于sql在web服务器上运行,不能读取到客户端的excel地址,就会出错了。

     既然知道了错误的原因,解决方案也就有了:

1、把客户端的excel上传至web服务器上某文件夹,注意要给该文件夹设置网络用户的“写入”权限;

2、使用OleDb+sql语句读取web服务器上的excel文件

3、将读取的数据写入到sql server 数据库

4、将web服务器上的临时excel删除

部分代码如下:

string filename = FileUpload1.PostedFile.FileName.Substring(FileUpload1.PostedFile.FileName.LastIndexOf("//"));
FileUpload1.PostedFile.SaveAs(Server.MapPath("fileupload//") + filename);//上传文件

string conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("fileupload//") + filename + ";Extended Properties=Excel 8.0";
string sqlin = "SELECT * FROM [Sheet2$]";
OleDbCommand olecommand = new OleDbCommand(sqlin, new OleDbConnection(conn));
OleDbDataAdapter adapterin = new OleDbDataAdapter(olecommand);
DataSet dsin = new DataSet();
adapterin.Fill(dsin);
DataTable dtin = dsin.Tables[0];//连接并读取excel数据

for (i = 3; i <= totalrow; i++)//将Excel文件中第一个工作表的数据导入到sql数据库scjd_youliaoxiaohaojihua表中
{
     string sql = "insert into scjd_youliaoxiaohaojihua(yuexuhao,danwei,youpin,cheliangmingchengxinghao,zichanxingzhi,chepaihao,qiyou,chaiyou,beizhu) values('";
     int j;
     sql += DropDownList1.SelectedValue.ToString() + DropDownList3.SelectedValue.ToString();
     if (DropDownList1.SelectedValue.ToString() != DateTime.Now.Year.ToString() || int.Parse(DateTime.Now.Month.ToString()) != int.Parse(DropDownList3.SelectedValue.ToString()))
     {
         sql += "20";
     }
     else
     {
        if (int.Parse(DateTime.Now.Day.ToString()) < 10)
          sql += "0";
        sql += DateTime.Now.Day.ToString();
     }
     if (i-3 + count < 9)
           sql += "00";
     else if (i-3 + count < 99)
          sql += "0";
     sql += (i -3 + 1 + count).ToString();
     sql += "','";
     for (j = 1; j < 8; j++)
     {//遍历Excel表中一行的所有列,除最后一列
         sql += dtin.Rows[i][j].ToString().Trim();
         sql += "','";
     }
     sql += dtin.Rows[i][8].ToString().Trim();
     sql += "')";
     try
     {
          DoSql(sql);
     }
     catch (Exception eeeeeee)
      {
         Response.Write("<script>alert('数据导入错误,请检查Excel文件')</script>");
         return;
      }
}

FileInfo file = new FileInfo(Server.MapPath("fileupload/") + filename);
if (file.Exists)
{//删除文件
        file.Delete();
}

protected void DoSql(string sql)//执行sql语句的函数
    {
        SqlConnection conn = new SqlConnection();//创建连接对象
        conn.ConnectionString = ConfigurationManager.AppSettings["conn"].ToString();//给连接字符串赋值
        conn.Open();//打开数据库
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.ExecuteNonQuery();//
        conn.Close();//关闭数据库
    }

注:

1、本文代码均取自我最近刚做的一个小项目,部分数据有较强针对性,并不通用,只有思路通用

2、由于能力和水平问题,部分代码显得有些笨拙,若能灵活运用存储过程,应能大幅度简化代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值