C#实现把查询出的Table作为参数更新到数据库
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作为参数更新到数据库的更多相关文章
- JMeter连接数据库(查询出的数据作为参数)
针对Mysql jdbc:mysql://ip:3306/数据库名?useUnicode=true&characterEncoding=utf8&allowMultiQueries=t ...
- MySQL GROUP_CONCAT函数使用示例:如何用一个SQL查询出一个班级各个学科第N名是谁?
如何用一个SQL查询出一个班级各个学科第N名是谁? 首先贴出建表语句,方便大家本地测试: -- 建表语句 CREATE TABLE score ( id INT NOT NULL auto_incre ...
- Oracle查询出最最近一次的一条记录
需求:从一个表中查询数据,得到的数据为最新的一条记录. -------------建立测试表 --drop table TB ),dtDate date) -------------插入测试数据 ,' ...
- [转载]编写SQL语句查询出每个各科班分数最高的同学的名字,班级名称,课程名称,分数
[转载]编写SQL语句查询出每个各科班分数最高的同学的名字,班级名称,课程名称,分数 转载自:https://blog.csdn.net/one_money/article/details/56921 ...
- Saiku根据入参日期查询出对应的数据(二十)
Saiku根据入参日期查询出对应的数据 之前好像有写过一篇博客关于saiku date range的,现在进一步更新啦!!! 这里的日期筛选会更完善一些,需要提供两个参数 开始日期与结束日期(star ...
- mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,
在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记 ...
- SQL查询有两门以上不及格的学生及查询出全部及格的学生
1.表结构: /*学生*/ create table student( sno int not null primary key, sname ) ); /*课程*/ create table cen ...
- Struts2自定义标签2自定义一个按班级id查询出该班级下的学生,存放进值栈,并遍历出来。
Struts2自定义标签的流程概念: (1)需要两个类:标签类(继承相应的tag类),基本类(继承Component).标签类专门负责从客户端取得用户输入的一些属性,这个普通的jsp自定义标签一样,取 ...
- 匿名类型 使用泛型T linq返回dynamic类型的匿名实体 如何把匿名类型.GetType()返回的对象传进泛型里面 EF实体查询出的数据List<T>转DataTable出现【DataSet 不支持 System.Nullable<>】的问题
[100分]紧急求助:LinQ下使用IQueryable<T>如何将返回类型<T>使用匿名类型 问题描述如下:我有一个方法如下:public IQueryable Dissen ...
随机推荐
- Python--day46--用户管理设计方案介绍
1,基于用户权限管理: 2,基于角色的权限管理: 开始一个项目如果要100天的,可能70天都在设计,比如设计数据库表结构,最后30天才是写代码.设计是最难的,写代码是最简单的. 还有一个重要的一点,写 ...
- 《Netty权威指南》(一)简单的时间服务器P69
由于该书是基于Netty5编写的样例代码,而Netty5已经被官方废弃. 目前基于推荐版的4.1.12.Final在学习过程中,可能会出现个别接口不一致的情况.所以记录可在4.1.12下编译通过的代码 ...
- [转]C#操作Word的超详细总结
本文中用C#来操作Word,包括: 创建Word: 插入文字,选择文字,编辑文字的字号.粗细.颜色.下划线等: 设置段落的首行缩进.行距: 设置页面页边距和纸张大小: 设置页眉.页码: 插入图片,设置 ...
- LOGO的浮空显示-Verilog
为了方便生成准确的mif数据,以实现特定的透明效果.使用Photoshop将网上下载的Logo修改颜色,保存大小为120*120像素,如图1所示. 图1 ps修改后的Logo 使用Pic2mif软件, ...
- react + webpack 多页面搭建
一.利用 creat-react-app 新建一个react单页面应用. cnpm i -g create-react-app create-react-app demo cd demo npm st ...
- [板子]KMP
KMP板子,你甚至可以用这个板子A掉luogu的3375 基础懒得说,要求一个Next数组. #include<cstdio> #include<algorithm> #inc ...
- POJ2763 Housewife Wind 树链剖分 边权
POJ2763 Housewife Wind 树链剖分 边权 传送门:http://poj.org/problem?id=2763 题意: n个点的,n-1条边,有边权 修改单边边权 询问 输出 当前 ...
- codeforces 1183H 动态规划
codeforces 1183H 动态规划 传送门:https://codeforces.com/contest/1183/problem/H 题意: 给你一串长度为n的字符串,你需要寻找出他的最长的 ...
- docker 挂载目录挂载不上**
最近做项目做一个shared Dynamodb, 使用docker挂载一个image,发现怎么都挂载不上, 使用 $ pwd E:\Work\Aws\git\schema\dynamodb\local ...
- jdbc链接Oracle数据库的封装
在src下创建properties文件 driver=oracle.jdbc.driver.OracleDriverurl=jdbc:oracle:thin:@//127.0.0.1:1521/XEu ...