1.ImportData主方法

把传入为object数组类型,按照下标取出对应的参数,此处为Table和Username

public object[] ImportData(object[] Param)
{
DataTable dt = (DataTable)Param[];
string msg1 = "", msg2 = "", msg3 = "";
Hashtable ht = new Hashtable();
username = Param[].ToString();//操作人工号
ExecutionResult result = new ExecutionResult();
result.Message = "";
dbTools = new InfoLightDBTools(this.ClientInfo, this.GetClientInfo(ClientInfoType.LoginDB).ToString());
string SN = ""; string ITEM_NO = ""; string FAILURE = ""; string CORRECT = ""; string ISSUE = ""; string STATUS = ""; string ISSUE_TYPE = "";
for (int i = ; i < dt.Rows.Count; i++)
{
//需要进行操作的列
SN = dt.Rows[i]["SERIAL_NUMBER"].ToString();
ITEM_NO = dt.Rows[i]["ITEM_NO"].ToString();
FAILURE = dt.Rows[i]["FAILURE_ANALYSE"].ToString();
CORRECT = dt.Rows[i]["CORRECT_ACTION"].ToString();
ISSUE = dt.Rows[i]["ISSUE_OWNER"].ToString();
STATUS = dt.Rows[i]["STATUS"].ToString();
ISSUE_TYPE = dt.Rows[i]["ISSUE_TYPE"].ToString();
if (CheckFA(FAILURE))
{
#region Oprator
if (!CheckValue(SN, ITEM_NO))//根据Key进行Check数据是否存在,不存在进行Insert,存在则进行Update
{
result = DoInsert(SN, ITEM_NO, FAILURE, CORRECT, ISSUE, ISSUE_TYPE, STATUS);//Insert操作
if (!result.Status)
{
msg1 += "在第" + (i + ).ToString() + "行,SERIAL_NUMBER: " + SN + " ITEM_NO:" + ITEM_NO + " Insert数据时失败:" + result.Message;
result.Status = false;
continue;
}
}
else
{
result = DoUpdate(SN, ITEM_NO, FAILURE, CORRECT, ISSUE, ISSUE_TYPE, STATUS);//Update 操作
if (!result.Status)
{
msg2 = "在第" + (i + ).ToString() + "行,SERIAL_NUMBER: " + SN + " ITEM_NO:" + ITEM_NO + " Update数据时失败:" + result.Message;
result.Status = false;
continue;
}
}
#endregion
}
else
{
msg3 += "Excel中第" + (i + ).ToString() + "行的FAILURE_ANALYSE值为空!";
result.Status = false;
continue;
}
}
result.Message = "";
if (!string.IsNullOrEmpty(msg1))
{
result.Message += " Insert Error: " + msg1;
}
if (!string.IsNullOrEmpty(msg2))
{
result.Message += " Update Error: " + msg2;
}
if (!string.IsNullOrEmpty(msg3))
{
result.Message += msg3;
} if (result.Message == "")
{
return new object[] { , "OK", result.Message };
}
else
{
return new object[] { , "NG", result.Message };
}
}

2.CheckValue

根据主键进行Check数据库中是否存在已有的数据

public bool CheckValue(string sn, string item_no)
{
dbTools = new InfoLightDBTools(this.ClientInfo, this.GetClientInfo(ClientInfoType.LoginDB).ToString());
DataTable dt = new DataTable();
DataSet ds = new DataSet();
Hashtable ht = new Hashtable();
ExecutionResult result = new ExecutionResult(); string sql = @" SELECT *
FROM SFISM4.R_FAILURE_ANALYSIS_T T
where T.Serial_Number = :sn
and T.Item_No = :item_no
"; ht.Clear();
ht.Add("sn", sn);
ht.Add("item_no", item_no); result = this.dbTools.ExecuteUpdateHt(sql, ht);
ds = (DataSet)this.dbTools.ExecuteQueryDSHt(sql, ht).Anything; if (ds != null && ds.Tables[].Rows.Count > )
{
return true;
}
else
{
return false;
}
}

3.DoInsert

根主键Check的内容为空则进行Insert

 public ExecutionResult DoInsert(string sn, string item_no, string failure, string correct, string issue, string issue_type, string status)
{
Hashtable ht = new Hashtable(); ExecutionResult result = new ExecutionResult();
this.dbTools = new InfoLightDBTools(this.ClientInfo, this.GetClientInfo(ClientInfoType.LoginDB).ToString());
string sql = @" insert into SFISM4.R_FAILURE_ANALYSIS_T
(SERIAL_NUMBER,
ITEM_NO,
FAILURE_ANALYSE,
CORRECT_ACTION,
ISSUE_OWNER,
ISSUE_TYPE,
STATUS,
CREATE_USER,
CREATE_TIME)
values
(:sn,
:item_no,
:failure,
:correct,
:issue,
:issue_type,
:status,
:username,
sysdate)
";
ht.Clear();
ht.Add("SN", sn);
ht.Add("item_no", item_no);
ht.Add("failure", failure);
ht.Add("correct", correct);
ht.Add("issue", issue);
ht.Add("issue_type", issue_type);
ht.Add("status", status);
ht.Add("username", username); result = this.dbTools.ExecuteUpdateHt(sql, ht);
return result;
}

4.DoUpdate

根据主键Check的内容非空则进行Update

public ExecutionResult DoUpdate(string sn, string item_no, string failure, string correct, string issue, string issue_type, string status)
{
Hashtable ht = new Hashtable();
ExecutionResult result = new ExecutionResult();
this.dbTools = new InfoLightDBTools(this.ClientInfo, this.GetClientInfo(ClientInfoType.LoginDB).ToString());
string sql = @" update SFISM4.R_FAILURE_ANALYSIS_T T
set T.Failure_Analyse = :failure,
T.Correct_Action = :correct,
T.Issue_Owner = :issue,
T.ISSUE_TYPE = :issue_type,
T.Status = :status,
T.Update_User = :username,
T.Update_Time = sysdate,
T.STATE_FLAG = 0
where T.Serial_Number = :sn
and T.ITEM_NO = :item_no
"; ht.Clear();
ht.Add("SN", sn);
ht.Add("item_no", item_no);
ht.Add("failure", failure);
ht.Add("correct", correct);
ht.Add("issue", issue);
ht.Add("issue_type", issue_type);
ht.Add("status", status);
ht.Add("username", username); result = this.dbTools.ExecuteUpdateHt(sql, ht);
return result; }
}

C#实现把查询出的Table作为参数更新到数据库的更多相关文章

  1. JMeter连接数据库(查询出的数据作为参数)

    针对Mysql jdbc:mysql://ip:3306/数据库名?useUnicode=true&characterEncoding=utf8&allowMultiQueries=t ...

  2. MySQL GROUP_CONCAT函数使用示例:如何用一个SQL查询出一个班级各个学科第N名是谁?

    如何用一个SQL查询出一个班级各个学科第N名是谁? 首先贴出建表语句,方便大家本地测试: -- 建表语句 CREATE TABLE score ( id INT NOT NULL auto_incre ...

  3. Oracle查询出最最近一次的一条记录

    需求:从一个表中查询数据,得到的数据为最新的一条记录. -------------建立测试表 --drop table TB ),dtDate date) -------------插入测试数据 ,' ...

  4. [转载]编写SQL语句查询出每个各科班分数最高的同学的名字,班级名称,课程名称,分数

    [转载]编写SQL语句查询出每个各科班分数最高的同学的名字,班级名称,课程名称,分数 转载自:https://blog.csdn.net/one_money/article/details/56921 ...

  5. Saiku根据入参日期查询出对应的数据(二十)

    Saiku根据入参日期查询出对应的数据 之前好像有写过一篇博客关于saiku date range的,现在进一步更新啦!!! 这里的日期筛选会更完善一些,需要提供两个参数 开始日期与结束日期(star ...

  6. mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,

      在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记 ...

  7. SQL查询有两门以上不及格的学生及查询出全部及格的学生

    1.表结构: /*学生*/ create table student( sno int not null primary key, sname ) ); /*课程*/ create table cen ...

  8. Struts2自定义标签2自定义一个按班级id查询出该班级下的学生,存放进值栈,并遍历出来。

    Struts2自定义标签的流程概念: (1)需要两个类:标签类(继承相应的tag类),基本类(继承Component).标签类专门负责从客户端取得用户输入的一些属性,这个普通的jsp自定义标签一样,取 ...

  9. 匿名类型 使用泛型T linq返回dynamic类型的匿名实体 如何把匿名类型.GetType()返回的对象传进泛型里面 EF实体查询出的数据List<T>转DataTable出现【DataSet 不支持 System.Nullable<>】的问题

    [100分]紧急求助:LinQ下使用IQueryable<T>如何将返回类型<T>使用匿名类型 问题描述如下:我有一个方法如下:public IQueryable Dissen ...

随机推荐

  1. Python--day24--复习

  2. Spring Security实现禁止用户重复登陆(配置及原理)

    系统使用了Spring Security做权限管理,现在对于系统的用户,需要改动配置,实现无法多地登陆.   一.SpringMVC项目,配置如下: 首先在修改Security相关的XML,我这里是s ...

  3. Laravel Form-builder使用

    添加formbuilder插件: Composer应用 composer require kris/laravel-form-builder 下载成功 修改配置文件 在config/app.php ‘ ...

  4. React MVC框架 <某某后台商品管理开源项目> 完成项目总结

    **百货后台商品信息开源项目 1.利用React  app脚手架 2.封装打包 buid 3.更偏向于后台程序员开发思维 4.利用的 react -redux    react-router-dom  ...

  5. H3C 单路径网络中环路产生过程(2)

  6. QQ三方登录

    申请了十天,最终通过了审核,能够上线了,事实上申请的第一天,站点的qq登录已经做好了,而且能够用測试帐号登录,但提交审核后,总是通只是,提示:您的站点审核未通过.原因是"未放置QQ登录but ...

  7. 「THUPC 2019」不等式 / inequality

    https://loj.ac/problem/6620 高中数学好题.. |kx+b|的函数图像很直观,直接考虑函数图像: 一定只有一段极小值点! 这个点就是最小值了 特点:斜率为0! 而且发现,如果 ...

  8. P1032 队列的序列

    题目描述 现在告诉你有一个队列,一开始它是空的,首先你会把 1,2,3,-m 这 m 个数依次push入这个队列. 接着,会进行 n 次操作,每次操作你需要进行如下操作: 首先,获得队首元素,输出队首 ...

  9. Node.js Windows Binary二进制文件安装

    1.下载文件 安装包的下载路径为:https://nodejs.org/en/download/ 选择你需要的版本,这里我选择了 Windows Binary 64-bit 版本. 2.配置npm安装 ...

  10. JS的防抖与节流学习笔记

    防抖(debounce):当持续触发事件时,在一定的时间段内,只有最后一次触发的事件才会执行. 例: function debounce(fn, wait) { var timer = null; r ...