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. PHP+MySQL实现对一段时间内每天数据统计优化操作实例

    http://www.jb51.net/article/136685.htm 这篇文章主要介绍了PHP+MySQL实现对一段时间内每天数据统计优化操作,结合具体实例形式分析了php针对mysql查询统 ...

  2. linux scull 代码read 方法

    read 的返回值由调用的应用程序解释: 如果这个值等于传递给 read 系统调用的 count 参数, 请求的字节数已经被传送. 这是最好的情况. 如果是正数, 但是小于 count, 只有部分数据 ...

  3. 12563 - Jin Ge Jin Qu hao——[DP递推]

    (If you smiled when you see the title, this problem is for you ^_^) For those who don’t know KTV, se ...

  4. dotnet core 使用 GBK 编码

    本文告诉大家如何在 .NET Core 中使用 GBK 编码 默认的 .NET Core 框架不包含 GBK 编码,不包含除了代码页为 28591 和 Unicode(utf-8,utf-16) 之外 ...

  5. JQ绑定事件的叠加和解决,index()方法的坑

    JQ绑定事件的叠加和解决,index()方法的坑 前言 在做过几个不大不小的项目后,发现技术这种东西,必须要多多实践,才能发现各种问题,理论的知识掌握的再好终究是纸上谈兵. 因此目前感觉有两点是必须要 ...

  6. CountDownLatch 部分加载和同时并发业务。

    按顺序部分加载: import java.util.concurrent.CountDownLatch; /** * @Title: ThreadCountDownTest.java * @Descr ...

  7. FCKeditor使用

    fckeditor - (1)资料介绍与安装 fckeditor介绍  FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器.  1.fckeditor官网:http://ww ...

  8. Python3 安装pylint 及与PyCharm关联

    使用如下命令: pip3 install pylint 安装完后可以看到在你的python3的目录底下的Scripts目录下有pylint.exe了 然后就可以使用pylint 评估你的代码了,如: ...

  9. pytorch torch.Stroage();torch.cuda()

    转自:https://ptorch.com/news/52.html torch.Storage是单个数据类型的连续的一维数组,每个torch.Tensor都具有相同数据类型的相应存储.他是torch ...

  10. hdu3499---玄学的分层图

    枚举固然可以,但是我还是想看看分层图.... 如本题所述 ,从上图到下图就是一个折扣的过程,上部分只有一种办法下去,下部分图没有办法去上面,该模型十分的巧妙啊!!! 下面我来演示一下自己改的样例吧 紫 ...