excel宏调用webservice使用存储过程同步excel数据的方法
excel宏:
随后更新
webservice:
1.创建空应用程序
2.加入web服务
3.创建数据库訪问类库DataHelper
sqlserver:
创建数据同步的存储过程
下面是一些须要的代码。比較杂乱,有空再整理整理。
DataFactory.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
namespace DataHelper
{
public class DataFactory
{
/// <summary>
/// 获取数据类型1为sqlserver,2为access
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public static DbHelper GetHelper()
{
string ConnStr = ConfigurationManager.AppSettings["ConnStr"].ToString();
int Dbtype = 1;
Int32.TryParse(ConfigurationManager.AppSettings["DbType"].ToString(), out Dbtype);
switch (Dbtype)
{
case 1:
return new SqlHelper(ConnStr);
case 2:
return new OledbHelper(ConnStr);
default:
return new SqlHelper(ConnStr);
}
}
public static DbHelper GetHelper1()
{
string ConnStr = ConfigurationManager.AppSettings["ConnStr1"].ToString();
int Dbtype = 1;
Int32.TryParse(ConfigurationManager.AppSettings["DbType"].ToString(), out Dbtype);
switch (Dbtype)
{
case 1:
return new SqlHelper(ConnStr);
case 2:
return new OledbHelper(ConnStr);
default:
return new SqlHelper(ConnStr);
}
}
public static DbHelper GetYellowPageHelper()
{
string ConnStr = ConfigurationManager.AppSettings["ConnStrYP"].ToString();
int Dbtype = 1;
Int32.TryParse(ConfigurationManager.AppSettings["DbType"].ToString(), out Dbtype);
switch (Dbtype)
{
case 1:
return new SqlHelper(ConnStr);
case 2:
return new OledbHelper(ConnStr);
default:
return new SqlHelper(ConnStr);
}
}
/// <summary>
/// Discuz数据库
/// </summary>
/// <returns></returns>
public static DbHelper GetYellowPageHelperDNT()
{
string ConnStr = ConfigurationManager.AppSettings["ConnStrDNT"].ToString();
int Dbtype = 1;
Int32.TryParse(ConfigurationManager.AppSettings["DbType"].ToString(), out Dbtype);
switch (Dbtype)
{
case 1:
return new SqlHelper(ConnStr);
case 2:
return new OledbHelper(ConnStr);
default:
return new SqlHelper(ConnStr);
}
}
}
}
DbHelper.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Text;
using System.Collections.Specialized;
namespace DataHelper
{
public abstract class DbHelper
{
/// <summary>
/// 得到数据库链接
/// </summary>
public abstract IDbConnection Connection { get; }
/// <summary>
/// 打开数据库连接;
/// </summary>
public abstract void Open();
/// <summary>
/// 关闭数据库链接;
/// </summary>
public abstract void Close();
/// <summary>
/// 開始一个事务;
/// </summary>
public abstract void BeginTrans();
/// <summary>
/// 提交一个事务;
/// </summary>
public abstract void CommitTrans();
/// <summary>
/// 回滚一个事务;
/// </summary>
public abstract void RollBackTrans();
/// <summary>
/// 运行sql语句,返回受影响集合数
/// </summary>
/// <param name="cmdType">命令类型</param>
/// <param name="cmdText">命令字符串</param>
/// <param name="commandParameters">命令參数</param>
/// <returns></returns>
public abstract int ExecuteNonQuery(CommandType cmdType, string cmdText, NameValueCollection pars);
/// <summary>
/// 运行sql语句,返回IDataReader
/// </summary>
/// <param name="cmdType">命令类型</param>
/// <param name="cmdText">命令字符串</param>
/// <param name="commandParameters">命令參数</param>
/// <returns></returns>
public abstract DbDataReader ExecuteReader(CommandType cmdType, string cmdText, NameValueCollection pars);
/// <summary>
/// 运行sql语句,返回结构的第一行,第一列的值
/// </summary>
/// <param name="cmdType">命令类型</param>
/// <param name="cmdText">命令字符串</param>
/// <param name="commandParameters">命令參数</param>
/// <returns></returns>
public abstract object ExecuteScalar(CommandType cmdType, string cmdText, NameValueCollection pars);
/// <summary>
/// 运行sql语句。获得datatable
/// </summary>
/// <param name="cmdType">命令类型</param>
/// <param name="cmdText">命令字符串</param>
/// <param name="commandParameters">命令參数</param>
/// <returns></returns>
public abstract DataTable GetDataTable(CommandType cmdType, string cmdText, NameValueCollection pars);
}
}
OledbHelper.cs
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
namespace DataHelper
{
class OledbHelper : DbHelper
{
private OleDbConnection conn;
private OleDbTransaction trans;
private bool inTransaction = false; //指示当前是否正处于事务中
/// <summary>
/// 构造函数,初始OledbConnection对象
/// </summary>
/// <param name="StrConnection"></param>
public OledbHelper(string StrConnection)
{
this.conn = new OleDbConnection(StrConnection);
}
/// <summary>
/// 获取Conneciton
/// </summary>
public override IDbConnection Connection
{
get { return this.conn; }
}
/// <summary>
/// 打开数据库连接
/// </summary>
public override void Open()
{
if (conn.State != ConnectionState.Open)
{
this.conn.Open();
}
}
/// <summary>
/// 关闭数据库连接。释放资源
/// </summary>
public override void Close()
{
if (this.trans != null)
{
this.trans.Dispose();
}
if (conn.State != ConnectionState.Closed)
{
conn.Close();
}
conn.Dispose();
}
public override void BeginTrans()
{
trans = conn.BeginTransaction();
inTransaction = true;
}
public override void CommitTrans()
{
trans.Commit();
inTransaction = false;
}
public override void RollBackTrans()
{
trans.Rollback();
inTransaction = false;
}
/// <summary>
/// 參数准备
/// </summary>
/// <param name="cmdType"></param>
/// <param name="cmdText"></param>
/// <param name="commandParameters"></param>
public void PrepareCommand(OleDbCommand cmd, CommandType cmdType, string cmdText, NameValueCollection pars)
{
if (this.trans != null)
{
cmd.Transaction = this.trans;
}
cmd.Connection = conn;
cmd.CommandType = cmdType;
cmd.CommandText = cmdText;
if (pars != null && pars.Count > 0)
{
string[] keys = pars.AllKeys;
for (int i = 0; i < pars.Count; i++)
{
cmd.Parameters.AddWithValue(keys[i], pars[i]);
}
}
}
public override int ExecuteNonQuery(CommandType cmdType, string cmdText, NameValueCollection pars)
{
using (OleDbCommand cmd = new OleDbCommand())
{
this.PrepareCommand(cmd, cmdType, cmdText, pars);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
}
public override DbDataReader ExecuteReader(CommandType cmdType, string cmdText, NameValueCollection pars)
{
using (OleDbCommand cmd = new OleDbCommand())
{
this.PrepareCommand(cmd, cmdType, cmdText, pars);
DbDataReader dr = cmd.ExecuteReader();
cmd.Parameters.Clear();
return dr;
}
}
public override object ExecuteScalar(CommandType cmdType, string cmdText, NameValueCollection pars)
{
using (OleDbCommand cmd = new OleDbCommand())
{
this.PrepareCommand(cmd, cmdType, cmdText, pars);
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}
}
public override DataTable GetDataTable(CommandType cmdType, string cmdText, NameValueCollection pars)
{
using (OleDbCommand cmd = new OleDbCommand())
{
DataTable dt = new DataTable();
this.PrepareCommand(cmd, cmdType, cmdText, pars);
using (DbDataAdapter da = new OleDbDataAdapter())
{
da.SelectCommand = cmd;
da.Fill(dt);
cmd.Parameters.Clear();
return dt;
}
}
}
}
}
SqlHelper.cs
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
namespace DataHelper
{
class SqlHelper : DbHelper
{
private SqlConnection conn;
private SqlTransaction trans;
private bool inTransaction = false; //指示当前是否正处于事务中
/// <summary>
/// 获取IDbConnection
/// </summary>
public override IDbConnection Connection
{
get { return this.conn; }
}
/// <summary>
/// 构造函数,初始SqlConnection对象
/// </summary>
/// <param name="StrConnection"></param>
public SqlHelper(string StrConnection)
{
this.conn = new SqlConnection(StrConnection);
}
/// <summary>
/// 打开数据库连接
/// </summary>
public override void Open()
{
if (conn.State != ConnectionState.Open)
{
this.conn.Open();
}
}
/// <summary>
/// 关闭数据库连接,释放资源
/// </summary>
public override void Close()
{
if (this.trans != null)
{
this.trans.Dispose();
}
if (conn.State != ConnectionState.Closed)
{
conn.Close();
}
conn.Dispose();
}
/// <summary>
/// 開始事务
/// </summary>
public override void BeginTrans()
{
trans = conn.BeginTransaction();
inTransaction = true;
}
/// <summary>
/// 提交事务
/// </summary>
public override void CommitTrans()
{
trans.Commit();
inTransaction = false;
}
/// <summary>
/// 回滚事务
/// </summary>
public override void RollBackTrans()
{
trans.Rollback();
inTransaction = false;
}
/// <summary>
/// 參数准备
/// </summary>
/// <param name="cmdType"></param>
/// <param name="cmdText"></param>
/// <param name="commandParameters"></param>
public void PrepareCommand(SqlCommand cmd, CommandType cmdType, string cmdText, NameValueCollection pars)
{
if (this.trans != null)
{
cmd.Transaction = this.trans;
}
cmd.Connection = conn;
cmd.CommandType = cmdType;
cmd.CommandText = cmdText;
if (pars != null && pars.Count > 0)
{
string[] keys = pars.AllKeys;
for (int i = 0; i < pars.Count; i++)
{
cmd.Parameters.AddWithValue(keys[i], pars[i]);
}
}
}
/// <summary>
/// 运行sql命令。返回受影响行数
/// </summary>
/// <param name="cmdType">命令类型</param>
/// <param name="cmdText">命令</param>
/// <param name="pars">參数组</param>
/// <returns>受影响行数</returns>
public override int ExecuteNonQuery(CommandType cmdType, string cmdText, NameValueCollection pars)
{
using (SqlCommand cmd = new SqlCommand())
{
this.PrepareCommand(cmd, cmdType, cmdText, pars);
int val = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return val;
}
}
/// <summary>
/// 运行sql命令,返回DbDataReader
/// </summary>
/// <param name="cmdType">命令类型</param>
/// <param name="cmdText">命令</param>
/// <param name="pars">參数组</param>
/// <returns>DbDataReader</returns>
public override DbDataReader ExecuteReader(CommandType cmdType, string cmdText, NameValueCollection pars)
{
using (SqlCommand cmd = new SqlCommand())
{
this.PrepareCommand(cmd, cmdType, cmdText, pars);
DbDataReader dr = cmd.ExecuteReader();
cmd.Parameters.Clear();
return dr;
}
}
/// <summary>
/// 运行sql语句,返回第一行第一列
/// </summary>
/// <param name="cmdType"></param>
/// <param name="cmdText"></param>
/// <param name="pars"></param>
/// <returns></returns>
public override object ExecuteScalar(CommandType cmdType, string cmdText, NameValueCollection pars)
{
using (SqlCommand cmd = new SqlCommand())
{
this.PrepareCommand(cmd, cmdType, cmdText, pars);
object val = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return val;
}
}
/// <summary>
/// 运行sql语句。返回DataTable
/// </summary>
/// <param name="cmdType">命令类型</param>
/// <param name="cmdText">命令</param>
/// <param name="pars">參数组</param>
/// <returns></returns>
public override DataTable GetDataTable(CommandType cmdType, string cmdText, NameValueCollection pars)
{
using (SqlCommand cmd = new SqlCommand())
{
DataTable dt = new DataTable();
this.PrepareCommand(cmd, cmdType, cmdText, pars);
using (DbDataAdapter da = new SqlDataAdapter())
{
da.SelectCommand = cmd;
da.Fill(dt);
cmd.Parameters.Clear();
return dt;
}
}
}
}
}
WebService.asmx
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data.Common;
using System.Data;
using System.Collections.Specialized;
using DataHelper;
namespace myWebService
{
/// <summary>
/// WebService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要同意使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的凝视。
// [System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
string uid = GetGuid();
string test = "n7,5,20150701,10,20150701|n8,5,20150701,10,20150701|n9,5,20150701,9,20150701";
string[] rows=test.Split('|');
int rowsCount=rows.Length;
int colsCount=rows[0].Length;
string cmd = string.Empty;
string floorno=string.Empty;
NameValueCollection nvc=new NameValueCollection();
string result = string.Empty;
DataHelper.DbHelper dh = DataHelper.DataFactory.GetHelper();
dh.Open();
dh.BeginTrans();
try
{
List<String> sql = new List<string>();
for (int i = 0; i < rowsCount; i++)
{
sql.Add("insert into TARGETHISTORY(EQNO,FLOORNO,RUNSTART,RUNTIME,UPDATETIME,UID) values(@EQNO,@FLOORNO,@RUNSTART,@RUNTIME,@UPDATETIME,@UID)");
nvc = new NameValueCollection();
nvc.Add("@EQNO", rows[i].Split(',')[0]);
nvc.Add("@FLOORNO", rows[i].Split(',')[1]);
nvc.Add("@RUNSTART", rows[i].Split(',')[2]);
nvc.Add("@RUNTIME", rows[i].Split(',')[3]);
nvc.Add("@UPDATETIME", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff"));
nvc.Add("@UID", uid);
floorno = rows[i].Split(',')[1];
dh.ExecuteNonQuery(CommandType.Text, sql[i], nvc);
}
nvc = new NameValueCollection();
nvc.Add("@UID", uid);
nvc.Add("@FLOORNO", floorno);
dh.ExecuteNonQuery(CommandType.StoredProcedure, "DeviceShareLoad", nvc);
dh.CommitTrans();
result= "数据导入成功!
";
}
catch (Exception ex)
{
dh.RollBackTrans();
dh.Close();
result = "数据导入失败!请联系 IT!
错误原因:"+ex.ToString();
}
finally
{
dh.Close();
}
return result;
}
private static string GetGuid()
{
System.Guid guid = new Guid();
guid = Guid.NewGuid();
return guid.ToString();
}
}
}
webconfig
<?xml version="1.0" encoding="utf-8"?>
<!--
有关怎样配置 ASP.NET 应用程序的具体消息。请訪问
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<appSettings>
<!-- 1为sqlserver 2为 access -->
<add key="DbType" value="1"/>
<!-- sql server连接字符串 -->
<add key="ConnStr" value="server=.;uid=sa;pwd=891219;database=test;"/>
<!-- access连接字符串 -->
<!--<add key="ConnStr" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|#data#.mdb"/>-->
</appSettings>
</configuration>
存储过程
USE [test]
GO
/****** Object: StoredProcedure [dbo].[DeviceShareLoad] Script Date: 07/10/2015 02:49:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[DeviceShareLoad]
@floorno nvarchar(50),
@uid nvarchar(50)
AS
BEGIN
merge into targettable as t
using (select * from TARGETHISTORY where uid=@uid) as s
on t.floorno=@floorno and s.floorno=@floorno and t.eqno=s.eqno
when matched
then update set t.eqno=s.eqno,t.floorno=s.floorno,t.runstart=s.runstart,t.runtime=s.runtime,t.updatetime=getdate()
when not matched and s.floorno=@floorno
then insert (eqno,floorno,runstart,runtime,updatetime) values(s.eqno,s.floorno,s.runstart,s.runtime,getdate())
when not matched by source and t.floorno=@floorno
then delete;
SET NOCOUNT ON;
END
excel宏调用webservice使用存储过程同步excel数据的方法的更多相关文章
- pandas数据分析输出excel产生文本形式存储的百分比数据,如何处理?
关键词: python.pandas.to_excel.文本形式存储的数据 需求描述: 我用 python pandas 写了数据统计与分析脚本,并把计算结果用 pandas 的 to_excel() ...
- NPOI操作Excel时使用列头来读取数据的方法
首先定义扩展方法: public static ICell GetCell(this IRow row, string clounmName) { IRow firstRow = row.Sheet. ...
- 如何在open xml excel 中存储自定义xml数据?
如何在open xml excel 中存储自定义xml数据? 而且不能放在隐藏的cell单元格内,也不能放在隐藏的sheet内,要类似web网站的Application变量,但还不能是VBA和宏之类的 ...
- 爬虫实践——数据存储到Excel中
在进行爬虫实践时,我已经爬取到了我需要的信息,那么最后一个问题就是如何把我所爬到的数据存储到Excel中去,这是我没有学习过的知识. 如何解决这个问题,我选择先百度查找如何解决这个问题. 百度查到的方 ...
- Excel连接到MySQL,将Excel数据导入MySql,MySQL for Excel,,
Excel连接到MySQL 即使当今时代我们拥有了类似微软水晶报表之类的强大报表工具和其他一些灵活的客户管 理应用工具,众多企业在分析诸如销售统计和收入信息的时候,微软的Excel依然是最常用的工具. ...
- ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据
ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...
- 个人永久性免费-Excel催化剂功能第20波-Excel与Sqlserver零门槛交互-数据上传篇
Excel作为众多数据存储的交换介质,在不同的系统内的数据很少可以很连贯地进行整合分析,一般的业务系统都会提供导出Excel作为标配功能供用户使用系统内生成的数据. 此时最大的问题是,Excel很维去 ...
- 使用Excel表格的记录单功能轻松处理工作表中数据的方法
使用Excel表格的记录单功能轻松处理工作表中数据的方法 记录单是将一条记录分别存储在同一行的几个单元格中,在同一列中分别存储所有记录的相似信息段.使用记录单功能可以轻松地对工作表中的数据进行查看.查 ...
- DataTable to Excel(使用NPOI、EPPlus将数据表中的数据读取到excel格式内存中)
/// <summary> /// DataTable to Excel(将数据表中的数据读取到excel格式内存中) /// </summary> /// <param ...
随机推荐
- 【JBPM4】任务节点-任务分配swimlane
swimlane泳道,几个任务受理人相同的任务节点,可以划分为一个泳道 JPDL <?xml version="1.0" encoding="UTF-8" ...
- 设置loadrunner中每个mdrv.exe进程中包含的vuser个数
设置loadrunner中每个mdrv.exe进程中包含的vuser个数 在loadrunner中,默认的是每50个vuser会使用一个mdrv.exe进程,但是有些时候vuser中的使用的线程太多就 ...
- 查找文件which locate find
(1)which:查找命令文件路径 which ls //命令的路径查找是根据PATH环境变量 whereis ls echo $PATH //打印PATH环境变量 (2)locate:查找任意文件 ...
- Laravel5中的Session
有关Session的配置文件是aonfig/session.PHP文件. 如果不使用基于数据库.cookie或者Redis缓存类的Session的话,不需要改配置文件就可以使用了. 下面一个简单的使用 ...
- python+django+vue搭建前后端分离项目
以前一直是做基于PHP或JAVA的前后端分离开发,最近跟着python风搭建了一个基于django的前后端分享项目 准备工作:IDE,[JetBrains PyCharm2018][webpack 3 ...
- 洛谷——P3909 异或之积
P3909 异或之积 题目描述 对于A_1,A_2,A_3,\cdots,A_NA1,A2,A3,⋯,AN,求 (6\times \sum_{i=1}^N\sum_{j=i+1}^N\sum_ ...
- UTF-8字符「EF BF BD」-备胎
在众多的utf-8码点值中,除了ascii,你还应该记住「EF BF BD」,因为它是很多编程语言以及库中的备胎,即无效的码点值在编码的时候会默认用这个码点值进行替换,即utf-8中的超级「备胎」(R ...
- python 打包详解
基本步骤: 1. 写setup.py 2. 运行“python setup.py sdist” 3. 在当前目录下会生成文件夹“dist”,打包好的代码就在dist中,以“.tar.gz”的形式被压缩 ...
- CSS 笔记——盒子模型
2. 盒子模型 在CSS眼中,任何HTML标签对象都是一个矩形,有长度,宽度以及各角的定位坐标,俗称CSS 盒子模型理论. Margin(外边距) - 清除边框外的区域,外边距是透明的. Border ...
- luogu P2254 [NOI2005]瑰丽华尔兹
题目链接 luogu P2254 [NOI2005]瑰丽华尔兹 题解 为什么我我我不放放放bzoj的链接呢? 因为打的暴力啊,然后bzojT了呀QAQQQQQ(逃 然后luogu竟然过了呀呀呀 dp[ ...