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 ...
随机推荐
- 714 - Copying Books——[贪心、二分查找]
Before the invention of book-printing, it was very hard to make a copy of a book. All the contents h ...
- P1010 数值交换
题目描述 输入两个数 \(a\) 和 \(b\) ,将两个数交换,并输出交换后的 \(a\) 和 \(b\) . 输入格式 输入两个整数 \(a,b(1 \le a,b \le 10^6)\) 输出格 ...
- Dbvisualizer各种中文乱码问题解决方法
1.SQL Commander里中文显示成‘口’ 解:进入Tools -> Tool Properties -> General -> Appearence -> Fonts, ...
- 关于css中浮动的理解及实际应用
一.元素浮动的意义及使用:1. 浮动的意义:设置了浮动属性的元素会脱离普通标准流的控制,移动到其父元素中指定的位置的过程,将块级元素放在一行,浮动会脱离标准流,不占位置,会影响标准流,浮动只有左右浮动 ...
- C# 如何写 DEBUG 输出
本文来告诉大家一个规范,如何去写 DEBUG 的输出. 经常在代码中,需要使用 DEBUG 来输出一些奇怪的东西来进行测试.但是输出的窗口只有一个,如果有一个逗比在不停输出,那么就会让输出窗口看不到自 ...
- Javascript中那些你不知道的事之-- false、0、null、undefined和空字符串
话不多说直接进入主题:(如果有写的不对的地方欢迎指正) 我们先来看看他们的类型分别是什么: typeof类型检测结果 结论:false是布尔类型对象,0是数字类型对象,null是object对象,un ...
- python调用另一个文件中的代码,pycharm环境下:同文件夹下文件(.py)之间的调用,出现红线问题
如何调用另一个python文件中的代码无论我们选择用何种语言进行程序设计时,都不可能只有一个文件(除了“hello world”),通常情况下,我们都需要在一个文件中调用另外一个文件的函数呀数据等等, ...
- 为什么我们要使用DTO
基础结构解释 UI-表现层-与控制器打交道(UI向Controller 传递数据时使用DTO(数据传输对象)) Service-应用服务层 Domain 领域对象 DTO 数据传输对象,一般只包含基础 ...
- Python9_类
类的基础知识 属性:类变量.实例变量.方法:初始化方法 __init__ //初始化方法不是必须的:其他方法: //类的定义class Employee: empCount = 0 //类变量,有些 ...
- 【Linux】查看系统资源及相关信息
查看系统信息: uname -a # 查看Linux内核版本信息 cat /proc/version # 查看内核版本 cat /etc/issue # 查看系统版本 lsb_release -a # ...