111,126
社区成员
发帖
与我相关
我的任务
分享
public class clsTranslateObj
{
private void Receive()
{
int lenReceive = 0;
byte[] receivedByte = new byte[BUFFER_SIZE]; //接收返回字节数组
_rtnStr = string.Empty;
while (_flgConnect)
{
_rtnStr = string.Empty;
try
{
lenReceive = _translateClient.Receive(receivedByte, 0, BUFFER_SIZE, SocketFlags.None);
for (int i = 0; i < lenReceive; i++)
{
if (Convert.ToString(receivedByte[i], 16).Length == 1)
_rtnStr += ("0" + Convert.ToString(receivedByte[i], 16).ToString());
else if (Convert.ToString(receivedByte[i], 16).Length == 2)
_rtnStr += Convert.ToString(receivedByte[i], 16).ToString();
}
//接收成功处理
Console.WriteLine(_switchcode + " receive:" + lenReceive.ToString());
for(int j = 0; j < _rtnStr.Length; j+2)
{
sqlCmd = "insert into tagvalue(tagdatetime, tagcode, tagval) values(?tagdatetime, ?tagcode, ?tagval)";
//tagdatetime = DateTime.Now;
//tagcode = 实验室号;
//tagval = _rtnStr.Substring(j, 2);
}
}
catch(Exception ex)
{
Console.WriteLine(_switchcode + " Receive() error:" + ex.Message);
}
}
}
}
sqlCmd = "insert DELAYED into tagvalue(tagdatetime, tagcode, tagval) values(?tagdatetime, ?tagcode, ?tagval)";
DELAYED 使用延迟插入操作DELAYED调节符应用于INSERT和REPLACE语句。当DELAYED插入操作到达的时候,服务器把数据行放入一个队列中,并立即给客户端返回一个状态信息,这样客户端就可以在数据表被真正地插入记录之前继续进行操作了。如果读取者从该数据表中读取数据,队列中的数据就会被保持着,直到没有读取者为止。接着服务器开始插入延迟数据行(delayed-row)队列中的数据行。在插入操作的同时,服务器还要检查是否有新的读取请求到达和等待。如果有,延迟数据行队列就被挂起,允许读取者继续操作。当没有读取者的时候,服务器再次开始插入延迟的数据行。 这个过程一直进行,直到队列空了为止。
private static readonly object locker = new object();
......
......
然后在你的代码
lock(locker)
{
rtn = cmd.ExecuteNonQuery();
}
for(int j = 0; j < _rtnStr.Length; j+2)
{
sqlCmd = "insert into tagvalue(tagdatetime, tagcode, tagval) values(?tagdatetime, ?tagcode, ?tagval)";
//tagdatetime = DateTime.Now;
//tagcode = 实验室号;
//tagval = _rtnStr.Substring(j, 2);
}
for(int j = 0; j < _rtnStr.Length; j+2)
{
sqlCmd = "insert into tagvalue(tagdatetime, tagcode, tagval) values(?tagdatetime, ?tagcode, ?tagval)";
//tagdatetime = DateTime.Now;
//tagcode = 实验室号;
//tagval = _rtnStr.Substring(j, 2);
}