You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
586 lines
23 KiB
586 lines
23 KiB
using ICSSoft.Base.Config.AppConfig;
|
|
using ICSSoft.Base.Config.DBHelper;
|
|
using ICSSoft.Frame.Common;
|
|
using ICSSoft.Frame.Data.Entity;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace ICSSoft.Frame.Data.DAL
|
|
{
|
|
public class ICSAGVDAL
|
|
{
|
|
public static string CreateAGVTaskJJorBack(List<AGVCreateTaskModel> Model_List, List<ICSAGVTASKLOG> Log_List ,string Appconstr, string workpoint)
|
|
{
|
|
StringBuilder RtnMes = new StringBuilder("");
|
|
AGVCreateTaskReturnModel rr = new AGVCreateTaskReturnModel();
|
|
try
|
|
{
|
|
string CreateTaskUrl = "";
|
|
//获取URL地址
|
|
string sql = @" select vv.define1 from Sys_EnumValues vv
|
|
inner join Sys_Enumkey kk on kk.WorkPointCode=vv.WorkPointCode and kk.EnumKey=vv.EnumKey
|
|
where kk.enumname='AGV管控'
|
|
and vv.EnumText='CreateTaskUrl'
|
|
and kk.WorkPointCode ='" + workpoint + "'";
|
|
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
|
|
if (dt == null || dt.Rows.Count == 0)
|
|
{
|
|
throw new Exception("请联系管理员,在自定义档案中维护信息:AGV管控-CreateTaskUrl");
|
|
}
|
|
CreateTaskUrl = dt.Rows[0]["define1"].ToString();
|
|
|
|
|
|
for (int i = 0; i < Model_List.Count; i++)
|
|
{
|
|
var Model = Model_List[i];
|
|
var Log = Log_List[i];
|
|
try
|
|
{
|
|
|
|
string ReturnStr = CustWebRequest.WorkDayPostData(CreateTaskUrl, JsonConvert.SerializeObject(Model), "application/json;charset=UTF-8");
|
|
StringBuilder str = new StringBuilder();
|
|
str.AppendLine("创建AGV接口(CreateAGVTask):" + Model.trackingNumber);
|
|
str.AppendLine("接口传入数据:" + JsonConvert.SerializeObject(Model));
|
|
str.AppendLine("接口返回数据:" + ReturnStr);
|
|
ICSMO2UserDAL.WriteLogFile(str.ToString(), "AGV接口");
|
|
if (string.IsNullOrEmpty(ReturnStr))
|
|
{
|
|
throw new Exception("调用接口返回信息为空");
|
|
}
|
|
JObject obj = new JObject();
|
|
obj = JObject.Parse(ReturnStr);
|
|
|
|
if (obj["code"] == null)
|
|
{
|
|
throw new Exception("接口返回数据异常:数据内容:" + ReturnStr);
|
|
}
|
|
else if (obj["code"].ToString() != "200")
|
|
{
|
|
throw new Exception("接口返回数据异常:异常信息:" + obj["msg"].ToString());
|
|
}
|
|
try
|
|
{
|
|
rr = JsonConvert.DeserializeObject<AGVCreateTaskReturnModel>(ReturnStr);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception("解析接口返回数据失败:数据内容:" + ReturnStr + Environment.NewLine +
|
|
"失败原因:" + ex.Message);
|
|
}
|
|
Log.ParamsMes = JsonConvert.SerializeObject(Model);
|
|
Log.ReturnMes = ReturnStr;
|
|
Log.Eattribute2 = rr.data.id; //AGV任务编号,后续如果要回写小车到位状态,用此编号查询
|
|
WriteMesAgvLog(Log);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
RtnMes.Append("条码:"+Log.Lotno+",工序:"+Log.Opcode+",点位:"+Log.LocationCode+",区域:"+Log.Area+" 子件物料:"+Log.MaterialCode+":"+ex.Message+","+Log.TaskType+"失败,已跳过!\r\n");
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
return RtnMes.ToString();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
throw ex;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public static void AgvAreaToArea(AgvAreaToAreaModel Model, ICSAGVTASKLOG log, string Appconstr, string workpoint) {
|
|
try
|
|
{
|
|
string Url = "";
|
|
//获取URL地址
|
|
string sql = @" select vv.define1 from Sys_EnumValues vv
|
|
inner join Sys_Enumkey kk on kk.WorkPointCode=vv.WorkPointCode and kk.EnumKey=vv.EnumKey
|
|
where kk.enumname='AGV管控'
|
|
and vv.EnumText='regionalMoveUrl'
|
|
and kk.WorkPointCode ='" + workpoint + "'";
|
|
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
|
|
if (dt == null || dt.Rows.Count == 0)
|
|
{
|
|
throw new Exception("请联系管理员,在自定义档案中维护信息:AGV管控-regionalMoveUrl");
|
|
}
|
|
Url = dt.Rows[0]["define1"].ToString();
|
|
|
|
|
|
|
|
string ReturnStr = CustWebRequest.WorkDayPostData(Url, JsonConvert.SerializeObject(Model), "application/json;charset=UTF-8");
|
|
StringBuilder str = new StringBuilder();
|
|
str.AppendLine("创建AGV接口(regionalMove):" + Model.trackingNumber+" "+log.Opcode);
|
|
str.AppendLine("接口传入数据:" + JsonConvert.SerializeObject(Model));
|
|
str.AppendLine("接口返回数据:" + ReturnStr);
|
|
ICSMO2UserDAL.WriteLogFile(str.ToString(), "AGV接口");
|
|
if (string.IsNullOrEmpty(ReturnStr))
|
|
{
|
|
throw new Exception("调用接口返回信息为空");
|
|
}
|
|
JObject obj = new JObject();
|
|
obj = JObject.Parse(ReturnStr);
|
|
|
|
if (obj["code"] == null)
|
|
{
|
|
throw new Exception("接口返回数据异常:数据内容:" + ReturnStr);
|
|
}
|
|
else if (obj["code"].ToString() != "200")
|
|
{
|
|
throw new Exception("接口返回数据异常:异常信息:" + obj["msg"].ToString());
|
|
}
|
|
log.ParamsMes = JsonConvert.SerializeObject(Model);
|
|
log.ReturnMes = ReturnStr;
|
|
WriteMesAgvLog(log);
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
throw ex;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public static string AgvPointToPoint(List<PointToPointModel> Model_List, List<ICSAGVTASKLOG> Log_List, string Appconstr, string workpoint)
|
|
{
|
|
StringBuilder RtnMes = new StringBuilder("");
|
|
try
|
|
{
|
|
string CreateTaskUrl = "";
|
|
//获取URL地址
|
|
string sql = @" select vv.define1 from Sys_EnumValues vv
|
|
inner join Sys_Enumkey kk on kk.WorkPointCode=vv.WorkPointCode and kk.EnumKey=vv.EnumKey
|
|
where kk.enumname='AGV管控'
|
|
and vv.EnumText='PointToPointUrl'
|
|
and kk.WorkPointCode ='" + workpoint + "'";
|
|
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
|
|
if (dt == null || dt.Rows.Count == 0)
|
|
{
|
|
throw new Exception("请联系管理员,在自定义档案中维护信息:AGV管控-PointToPointUrl");
|
|
}
|
|
CreateTaskUrl = dt.Rows[0]["define1"].ToString();
|
|
|
|
|
|
for (int i = 0; i < Model_List.Count; i++)
|
|
{
|
|
var Model = Model_List[i];
|
|
var Log = Log_List[i];
|
|
try
|
|
{
|
|
|
|
string ReturnStr = CustWebRequest.WorkDayPostData(CreateTaskUrl, JsonConvert.SerializeObject(Model), "application/json;charset=UTF-8");
|
|
StringBuilder str = new StringBuilder();
|
|
str.AppendLine("创建AGV接口(PointToPointUrl):" +Log.Lotno);
|
|
str.AppendLine("接口传入数据:" + JsonConvert.SerializeObject(Model));
|
|
str.AppendLine("接口返回数据:" + ReturnStr);
|
|
ICSMO2UserDAL.WriteLogFile(str.ToString(), "AGV接口");
|
|
if (string.IsNullOrEmpty(ReturnStr))
|
|
{
|
|
throw new Exception("调用接口返回信息为空");
|
|
}
|
|
JObject obj = new JObject();
|
|
obj = JObject.Parse(ReturnStr);
|
|
|
|
if (obj["code"] == null)
|
|
{
|
|
throw new Exception("接口返回数据异常:数据内容:" + ReturnStr);
|
|
}
|
|
else if (obj["code"].ToString() != "200")
|
|
{
|
|
throw new Exception("接口返回数据异常:异常信息:" + obj["msg"].ToString());
|
|
}
|
|
Log.ParamsMes = JsonConvert.SerializeObject(Model);
|
|
Log.ReturnMes = ReturnStr;
|
|
WriteMesAgvLog(Log);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
RtnMes.Append("条码:" + Log.Lotno + ",工序:" + Log.Opcode + ",起始点位:" + Log.LocationCode + ",结束点位:" + Log.EndLocation + " :" + ex.Message + "," + Log.TaskType + "失败,已跳过!\r\n");
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
return RtnMes.ToString();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
throw ex;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static AGVCancelTaskReturnModel CancelAGVTask(AGVCancelTaskModel Model, string Appconstr, string workpoint)
|
|
{
|
|
AGVCancelTaskReturnModel rr = new AGVCancelTaskReturnModel();
|
|
try
|
|
{
|
|
string CreateTaskUrl = "";
|
|
//获取URL地址
|
|
string sql = @" select vv.define1 from Sys_EnumValues vv
|
|
inner join Sys_Enumkey kk on kk.WorkPointCode=vv.WorkPointCode and kk.EnumKey=vv.EnumKey
|
|
where kk.enumname='AGV管控'
|
|
and vv.EnumText='CancelTaskUrl'
|
|
and kk.WorkPointCode ='" + workpoint + "'";
|
|
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
|
|
if (dt == null || dt.Rows.Count == 0)
|
|
{
|
|
throw new Exception("请联系管理员,在自定义档案中维护信息:AGV管控-CancelTaskUrl");
|
|
}
|
|
CreateTaskUrl = dt.Rows[0]["define1"].ToString();
|
|
string ReturnStr = CustWebRequest.WorkDayPostData(CreateTaskUrl, JsonConvert.SerializeObject(Model), "application/json;charset=UTF-8");
|
|
StringBuilder str = new StringBuilder();
|
|
str.AppendLine("创建AGV接口(CancelAGVTask):" );
|
|
str.AppendLine("接口传入数据:" + JsonConvert.SerializeObject(Model));
|
|
str.AppendLine("接口返回数据:" + ReturnStr);
|
|
ICSMO2UserDAL.WriteLogFile(str.ToString(), "AGV接口");
|
|
if (string.IsNullOrEmpty(ReturnStr))
|
|
{
|
|
throw new Exception("调用接口返回信息为空");
|
|
}
|
|
JObject obj = new JObject();
|
|
obj = JObject.Parse(ReturnStr);
|
|
if (obj.Property("message") == null || obj.Property("result") == null)
|
|
{
|
|
throw new Exception("接口返回数据异常:数据内容:" + ReturnStr);
|
|
}
|
|
try
|
|
{
|
|
rr = JsonConvert.DeserializeObject<AGVCancelTaskReturnModel>(ReturnStr);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception("解析接口返回数据失败:数据内容:" + ReturnStr + Environment.NewLine +
|
|
"失败原因:" + ex.Message);
|
|
}
|
|
|
|
return rr;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
rr.result = null;
|
|
rr.message = ex.Message;
|
|
return rr;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public static bool IsCanToAGV(string Lotno,string Opcode,string Type, string Appconstr, string workpoint)
|
|
{
|
|
|
|
try
|
|
{
|
|
//获取URL地址
|
|
string sql = @" select vv.define1 from Sys_EnumValues vv
|
|
inner join Sys_Enumkey kk on kk.WorkPointCode=vv.WorkPointCode and kk.EnumKey=vv.EnumKey
|
|
where kk.enumname='AGV管控'
|
|
and vv.EnumText='" + Type + @"'
|
|
and kk.WorkPointCode ='" + workpoint+@"'
|
|
|
|
Select SEGCODE FROM ICSMO2USER WHERE lotno='"+Lotno+"' and opcode='"+Opcode+@"'
|
|
";
|
|
|
|
DataSet set = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql);
|
|
DataTable dt = set.Tables[0];
|
|
DataTable dt1 = set.Tables[1];
|
|
if (dt != null && dt.Rows.Count > 0)
|
|
{
|
|
if (dt.Rows[0]["define1"].ToString() == "是"&& dt1.Rows[0]["SEGCODE"].ToString()=="1")
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("请联系管理员,在自定义档案中维护信息:AGV管控-" + Type);
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception(ex.Message);
|
|
}
|
|
|
|
}
|
|
|
|
public static List<MaterialItem> GetOPBOM(string LotNo, string opcode, string Appconstr, string workpoint)
|
|
{
|
|
List<MaterialItem> List = new List<MaterialItem>();
|
|
try
|
|
{
|
|
string sql = @"
|
|
IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MODD' ) )
|
|
DROP TABLE #TEMP_MODD
|
|
IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MONewbom' ) )
|
|
DROP TABLE #TEMP_MONewbom
|
|
|
|
SELECT
|
|
lot.lotqty, mo.itemcode, rr.routecode, mo.workpoint
|
|
INTO #TEMP_MODD
|
|
FROM
|
|
icsitemlot lot
|
|
LEFT JOIN icsmo mo ON mo.mocode= lot.TransNO
|
|
AND mo.moseq= lot.TransLine
|
|
AND mo.workpoint= lot.workpoint
|
|
LEFT JOIN ICSMO2ROUTE rr ON rr.mocode= mo.mocode
|
|
AND rr.moid= mo.id
|
|
AND rr.workpoint= mo.workpoint
|
|
WHERE
|
|
lot.lotno= '" + LotNo + @"'
|
|
AND mo.workpoint= '" + workpoint + @"'
|
|
|
|
SELECT
|
|
itemcode, SBOMVER, workpoint INTO #TEMP_MONewbom
|
|
FROM
|
|
(
|
|
SELECT
|
|
MM.itemcode ,
|
|
mm.SBOMVER ,
|
|
MM.workpoint,
|
|
row_number ( ) OVER ( partition BY MM.itemcode ORDER BY mm.SBOMVER DESC ) rn
|
|
FROM
|
|
ICSSBOM MM
|
|
WHERE
|
|
EXISTS ( SELECT 1 FROM #TEMP_MODD DD WHERE MM.ITEMCODE= DD.ITEMCODE AND MM.workpoint= dd.workpoint )
|
|
) gg
|
|
WHERE
|
|
rn = 1
|
|
|
|
SELECT
|
|
ll.obitemcode, ll.obitemqty* dd.lotqty obitemqty
|
|
FROM
|
|
ICSOPBOMDETAIL ll
|
|
INNER JOIN #TEMP_MONewbom bb ON bb.itemcode= ll.itemcode
|
|
AND bb.WorkPoint= ll.workpoint
|
|
INNER JOIN #TEMP_MODD dd ON dd.routecode= ll.obcode
|
|
WHERE ll.opcode= '" + opcode + @"'
|
|
|
|
IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MODD' ) )
|
|
DROP TABLE #TEMP_MODD
|
|
IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MONewbom' ) )
|
|
DROP TABLE #TEMP_MONewbom
|
|
";
|
|
|
|
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
|
|
if (dt != null && dt.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow dr in dt.Rows)
|
|
{
|
|
MaterialItem mm = new MaterialItem();
|
|
mm.materialCode = dr["obitemcode"].ToString();
|
|
mm.qty = Convert.ToInt32(Convert.ToDouble(dr["obitemqty"].ToString()));
|
|
List.Add(mm);
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception(ex.Message);
|
|
}
|
|
return List;
|
|
}
|
|
|
|
public static bool IsFirstOP(string LOTNO, string opcode, string Appconstr, string workpoint)
|
|
{
|
|
try
|
|
{
|
|
string sql = @"
|
|
SELECT opcode FROM ICSITEMROUTE2OPLOT WHERE LOTNO='" + LOTNO + @"' ORDER BY OPSEQ
|
|
";
|
|
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
|
|
if (dt != null && dt.Rows.Count > 0)
|
|
{
|
|
if (opcode == dt.Rows[0]["opcode"].ToString())
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("查询工艺路线数据异常");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception(ex.Message);
|
|
}
|
|
}
|
|
|
|
public static bool IsLastOP(string LOTNO, string opcode, string Appconstr, string workpoint)
|
|
{
|
|
try
|
|
{
|
|
string sql = @"
|
|
SELECT opcode FROM ICSITEMROUTE2OPLOT WHERE LOTNO='" + LOTNO+@"' ORDER BY OPSEQ DESC
|
|
";
|
|
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
|
|
if (dt != null && dt.Rows.Count > 0)
|
|
{
|
|
if (opcode == dt.Rows[0]["opcode"].ToString())
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("查询工艺路线数据异常");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception(ex.Message);
|
|
}
|
|
}
|
|
|
|
|
|
public static bool NextOPisWW(string LOTNO, string opcode, string Appconstr, string workpoint)
|
|
{
|
|
try
|
|
{
|
|
string sql = @"
|
|
SELECT TOP 1 A.OPCODE,OPSEQ,C.EATTRIBUTE1 FROM ICSITEMROUTE2OPLOT A
|
|
LEFT JOIN ICSMO2USER C ON C.LOTNO=A.LOTNO AND C.OPCODE=A.OPCODE
|
|
WHERE A.LOTNO='"+LOTNO+@"'
|
|
AND OPSEQ>(SELECT OPSEQ FROM ICSITEMROUTE2OPLOT B WHERE B.LotNo=A.LotNo AND B.OPCODE='"+opcode+@"') ORDER BY A.OPSEQ
|
|
";
|
|
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
|
|
if (dt != null && dt.Rows.Count > 0)
|
|
{
|
|
if (String.IsNullOrEmpty(dt.Rows[0]["EATTRIBUTE1"].ToString())|| dt.Rows[0]["EATTRIBUTE1"].ToString()=="0")
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception(ex.Message);
|
|
}
|
|
}
|
|
|
|
|
|
public static bool NextOPisWG(string LOTNO, string opcode, string Appconstr, string workpoint)
|
|
{
|
|
try
|
|
{
|
|
string sql = @"
|
|
SELECT ACTIONRESULT FROM ICSLOTONWIP WHERE LOTNO='"+LOTNO+@"' AND OPCODE IN
|
|
(SELECT TOP 1 A.OPCODE FROM ICSITEMROUTE2OPLOT A
|
|
LEFT JOIN ICSMO2USER C ON C.LOTNO=A.LOTNO AND C.OPCODE=A.OPCODE
|
|
WHERE A.LOTNO='" + LOTNO + @"'
|
|
AND OPSEQ>(SELECT OPSEQ FROM ICSITEMROUTE2OPLOT B WHERE B.LotNo=A.LotNo AND B.OPCODE='" + opcode + @"') ORDER BY A.OPSEQ );
|
|
";
|
|
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
|
|
if (dt != null && dt.Rows.Count > 0)
|
|
{
|
|
if (dt.Rows[0]["ACTIONRESULT"].ToString()== "COLLECT_END")
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception(ex.Message);
|
|
}
|
|
}
|
|
|
|
|
|
public static string GetAreaCode(string enumkey, string EnumValue, string Appconstr, string workpoint) {
|
|
try
|
|
{
|
|
string sql = "select ENUMTEXT,DEFINE1,DEFINE2,DEFINE3 FROM Sys_EnumValues WHERE EnumKey='{0}' AND ENUMVALUE='{1}' and workpointcode='{2}'";
|
|
sql = string.Format(sql, enumkey, EnumValue,workpoint);
|
|
var reader = DBHelper.ExecuteReader(Appconstr, CommandType.Text, sql);
|
|
string returnmes = "";
|
|
while (reader.Read())
|
|
{
|
|
returnmes = reader.GetString(0) + ":" + reader.GetString(1)+"@"+ reader.GetString(2)+":"+ reader.GetString(3);
|
|
}
|
|
|
|
return returnmes;
|
|
}
|
|
catch (Exception ex) {
|
|
throw ex;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static void WriteMesAgvLog(ICSAGVTASKLOG log)
|
|
{
|
|
FramDataContext db = new FramDataContext(AppConfig.AppConnectString);
|
|
db.Connection.Open();
|
|
db.Transaction = db.Connection.BeginTransaction();
|
|
try
|
|
{
|
|
db.ICSAGVTASKLOG.InsertOnSubmit(log);
|
|
db.SubmitChanges();
|
|
db.Transaction.Commit();
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
db.Transaction.Rollback();
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
|
|
db.Connection.Close();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|