• C#实现把查询出的Table作为参数更新到数据库


    1.ImportData主方法

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

    public object[] ImportData(object[] Param)
            {
                DataTable dt = (DataTable)Param[0];
                string msg1 = "", msg2 = "", msg3 = "";
                Hashtable ht = new Hashtable();
                username = Param[1].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 = 0; 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 + 1).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 + 1).ToString() + "行,SERIAL_NUMBER: " + SN + " ITEM_NO:" + ITEM_NO + " Update数据时失败:" + result.Message;
                                result.Status = false;
                                continue;
                            }
                        }
                        #endregion
                    }
                    else
                    {
                        msg3 += "Excel中第" + (i + 1).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[] { 0, "OK", result.Message };
                }
                else
                {
                    return new object[] { 0, "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[0].Rows.Count > 0)
                {
                    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;
    
            }
        }
  • 相关阅读:
    记录上锁(字节范围锁,特例:锁住文件的某一部分或者整个文件)
    读写锁的实现原理(pthread_rwlock_t)
    Linux 互斥锁的实现原理(pthread_mutex_t)
    System V消息队列
    Web安全之SQL注入攻击技巧与防范
    如何正确地写出单例模式
    java的concurrent用法详解
    java并发编程-Executor框架
    java.util.concurrent包分类结构图
    Java多线程干货系列(1):Java多线程基础
  • 原文地址:https://www.cnblogs.com/wml-it/p/12201199.html
Copyright © 2020-2023  润新知