public bool isUpdateFrame(byte[] frame) { bool rv; byte order; byte[] data; insertData insdata; checkData ckdata; rv = true; order = 0; data = null; insdata = new insertData(); ckdata = new checkData(); //(2)解帧操作 if (!frameDecode(frame, ref data, ref order)) { rv = false; goto isUpdateFrame_EXIT; //解帧失败 } //(3)判断帧长 if (data.Length != Marshal.SizeOf(insdata) && data.Length != Marshal.SizeOf(ckdata)) { rv = false; goto isUpdateFrame_EXIT; //解帧失败 } isUpdateFrame_EXIT: return(rv); }
public async Task <IActionResult> insertnewAsync([FromBody] insertData body) { await Db.Connection.OpenAsync(); var query = new employee(Db); var result = new insertData(); result.salutation = body.salutation; result.firstName = body.firstName; result.MiddleName = body.MiddleName; result.lastName = body.lastName; result.gender = body.gender; result.nationality = body.nationality; result.date = body.date; result.addressLine1 = body.addressLine1; result.addressLine2 = body.addressLine2; result.Locality = body.Locality; result.city = body.city; result.contact = body.contact; await query.insertAsync(result); return(new OkObjectResult(result)); }
public async Task insertAsync(insertData result) { using var cmd = Db.Connection.CreateCommand(); cmd.CommandText = @"insert into employee(salutationId,firstName,middleName,lastName,employeeGenderId,birthDate)values (32,@salutation,@firstName,@middleName,@lastName,@gender,@date); set @last_id=LAST_INSERT_ID(); insert into address(employeeId,addressLine1, addressLine2, landmark,cityId) values(@last_id,@addressLine1,@addressLine2,@Locality,@city); insert into contact_information(employeeId,contactNumber) values(@last_id,@contact);"; BindParamsDATA(cmd, result.salutation, result.firstName, result.MiddleName, result.lastName, result.gender, result.date, result.contact, result.city); BindId(cmd, result.addressLine1, result.addressLine2, result.Locality); //bindParams cmd.CommandText = cmd.CommandText; await cmd.ExecuteNonQueryAsync(); }
private byte[] check; //检查帧状态,每1位表示一帧数据发送状态,1:已发送;0:未发送 //====================================================================== //函数名称:Update构造函数 //函数返回:无 //参数说明:hexList:待更新的Hex文件链表数据 //功能概要:Update构造函数,根据传入的Hex数据构造返回终端的更新数据帧和命令帧 //====================================================================== public Update(List <hexStruct> hexList) { //(1)变量声明 int i; ushort sum, cur; insertData insdata; //(2)获得传入的Hex文件链表数据 this.hexList = hexList; //(3)初始化发送至终端的链表 this.insertList = new List <insertData>(); //(4)构造开始更新命令帧,数据任意,在发送至终端时命令需设为0 insdata = new insertData(); insdata.insertInfo = new ushort[40]; insdata.data = new byte[400]; this.insertList.Add(insdata);//将更新命令帧插入链表 //(5)构造插入帧链表数据,发送时命令为1 getBackList(); //(6)构造更新检查帧和更新命令帧,数据任意,其对应的命令分别为2,3 this.insertList.Add(insdata); //添加更新检查帧 this.insertList.Add(insdata); //添加更新命令帧 //(7)修改总帧数和帧号 sum = (ushort)this.insertList.Count; cur = 0; for (i = 0; i < this.insertList.Count; i++) { insdata = this.insertList[i]; insdata.frameNum = sum; insdata.curFrame = cur++; this.insertList.RemoveAt(i); this.insertList.Insert(i, insdata); } //(8)初始化帧发送标识 check = new byte[sum]; for (i = 0; i < check.Length; i++) { check[i] = 0; } }
public void setUserAddress(int useraddr) { //(1)变量声明 int i; ushort sum, cur; insertData insdata; //(2)移除多余代码 removeCurableCode(); //(3)构造开始更新命令帧,数据任意,在发送至终端时命令需设为0 insdata = new insertData(); insdata.insertInfo = new ushort[40]; insdata.data = new byte[400]; this.insertList.Add(insdata); //(4)构造插入帧链表数据,发送时命令为1 getBackList(); //(5)构造更新检查帧和更新命令帧,数据任意,其对应的命令分别为2,3 this.insertList.Add(insdata); //添加更新检查帧 this.insertList.Add(insdata); //添加更新命令帧 //(6)修改总帧数和帧号 sum = (ushort)this.insertList.Count; cur = 0; for (i = 0; i < this.insertList.Count; i++) { insdata = this.insertList[i]; insdata.frameNum = sum; insdata.curFrame = cur++; this.insertList.RemoveAt(i); this.insertList.Insert(i, insdata); } //(12)初始化帧发送标识 check = new byte[sum]; for (i = 0; i < check.Length; i++) { check[i] = 0; } }
//public bool isUpdateFrame(byte[] frame) //{ // bool rv; // byte order; // byte[] data; // insertData insdata; // checkData ckdata; // rv = true; // order = 0; // data = null; // insdata = new insertData(); // ckdata = new checkData(); // //(2)解帧操作 // if (!frameDecode(frame, ref data, ref order)) // { // rv = false; // goto isUpdateFrame_EXIT; //解帧失败 // } // //(3)判断帧长 // if (data.Length != Marshal.SizeOf(insdata) && data.Length != Marshal.SizeOf(ckdata)) // { // rv = false; // goto isUpdateFrame_EXIT; //解帧失败 // } //isUpdateFrame_EXIT: // return rv; //} //===========================内部函数================================== //====================================================================== //函数名称:getBackList //函数返回:无 //参数说明:无 //功能概要:根据传入的Hex文件数据按照插入帧的格式构造数据帧(非命令帧) //====================================================================== private void getBackList() { //(1)变量声明 int i, j; ushort addr; ushort len; ushort lastAddr; ushort lastLen; ushort sumLen; byte[] data; insertData idata; //(2)数据初始化 idata = new insertData(); idata.insertInfo = new ushort[40]; idata.data = new byte[400]; //(3)遍历Hex数据链表来构造返回插入链表 for (i = 0; i < this.hexList.Count; i++) { //(3.1)获取本行数据基本信息 //获取本行代码待插入的地址 addr = this.hexList[i].address; //获取本行代码长度 len = this.hexList[i].len; //获取本行代码数据 data = this.hexList[i].data; //(3.2)进行插入帧赋值操作 if (idata.insertNum == 0) //判断当前行数据是否是第一个数据 { idata.operate = 1; idata.insertNum = 1; idata.insertInfo[0] = addr; idata.insertInfo[1] = len; Array.Copy(data, 0, idata.data, 0, len); } else //其他情况 { //获取当前已插入的数据总长度 sumLen = 0; for (j = 0; j < idata.insertNum; j++) { sumLen += idata.insertInfo[j * 2 + 1]; } //判断已插入的数据是否超出上限,包括插入个数和总的插入数据长度 if ((idata.insertNum >= 20) || (sumLen + len > 400)) //超出界限,新建一帧数据 { //将当前插入帧加入链表 this.insertList.Add(idata); //新建一个插入帧并赋值 idata = new insertData(); idata.insertInfo = new ushort[40]; idata.data = new byte[400]; idata.operate = 1; idata.insertNum = 1; idata.insertInfo[0] = addr; idata.insertInfo[1] = len; Array.Copy(data, 0, idata.data, 0, len); } else //未超出上限,再本插入帧中继续添加数据 { //判断本次插入数据是否与上次的相连 //先取出先前一行数据信息,包括地址和长度 lastAddr = idata.insertInfo[(idata.insertNum - 1) * 2]; lastLen = idata.insertInfo[(idata.insertNum - 1) * 2 + 1]; if (lastAddr + lastLen == addr) //相连,添加数据并修改上次数据长度 { Array.Copy(data, 0, idata.data, sumLen, len); idata.insertInfo[(idata.insertNum - 1) * 2 + 1] += len; } else //不相连,添加新的数据 { idata.insertInfo[idata.insertNum * 2] = addr; idata.insertInfo[idata.insertNum * 2 + 1] = len; idata.insertNum++; Array.Copy(data, 0, idata.data, sumLen, len); } } } //end if } //end for //(4)结束遍历,把最后的插入帧加入链表 this.insertList.Add(idata); }
//====================================================================== //函数名称:updateRecv //函数返回:0:数据命令帧发送成功; // 1:解帧操作失败;2:当前更新发生错误,更新操作需重新开始; // 3:检查操作失败;4:其他未知指令 //参数说明:frame:终端返回的帧数据 //功能概要:数据命令帧发送至终端后,终端返回数据至frame。 // 解析frame数据来判断终端操作状态 //====================================================================== public int updateRecv(byte[] frame) { //(1)变量声明 int i; int rv; //返回值 byte order; byte[] data; ushort framenum; ushort curframe; insertData insdata; checkData ckdata; rv = 0; //返回值默认成功,为0 order = 0; data = null; framenum = 0; curframe = 0; insdata = new insertData(); ckdata = new checkData(); //(2)解帧操作 if (!frameDecode(frame, ref data, ref order)) { rv = 1; goto updateRecv_EXIT; //解帧失败 } //(3)命令判断 switch (order) { case 4: //(3.1)终端数据接收成功 //判断返回的帧结构 if (data.Length == Marshal.SizeOf(insdata)) //满足插入帧 { //将byte数据转换为对应的更新帧结构体数据 insdata = (insertData)bytesToStruct(data, typeof(insertData)); framenum = insdata.frameNum; curframe = insdata.curFrame; } //修改发送标识 check[curframe] = 1; //数据发送成功 //若终端接收到开始更新命令,check if (curframe == 0) { for (i = 1; i < check.Length; i++) { check[i] = 0; //check数组初始值为0 } } break; case 5: //(3.2)当前更新发生错误,更新操作得重新开始 for (i = 0; i < check.Length; i++) //check数组重新赋值为0 { check[i] = 0; } rv = 2; break; case 6: //(3.3)检查操作失败 if (data.Length == Marshal.SizeOf(ckdata)) { //将byte数组解析为对应的检查帧结构体数据 ckdata = (checkData)bytesToStruct(data, typeof(checkData)); //根据终端返回的未接收帧号来修改check数组 for (i = 0; i < ckdata.loseNum; i++) { check[ckdata.loseFrame[i]] = 0; } rv = 3; } break; default: //其他未知命令 rv = 4; break; } updateRecv_EXIT: return(rv); }