亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

在SQL中使用CLR提供基本函數對二進制數據進行解析與構造

2024-07-21 02:49:16
字體:
來源:轉載
供稿:網友
在SQL中使用CLR提供基本函數對二進制數據進行解析與構造

?

二進制數據包的解析一般是借助C#等語言,在通訊程序中解析后形成字段,再統一單筆或者批量(表類型參數)提交至數據庫,在通訊程序中,存在BINARY到struct再到table的轉換。

現借助CLR提供基本的INT2HEX(小端)等函數,在SQL中直接解析數據包。

?

基本函數

  1. [Microsoft.SqlServer.Server.SqlFunction(Name = "Time2UTCBin")]
  2. publicstatic SqlBinary Time2UTCBin(DateTime time)
  3. {
  4. ????returnnew SqlBinary(BitConverter.GetBytes((uint)(MyTime.ConverDateTimeTojavaMilliSecond(time) / 1000)));
  5. }
  6. [Microsoft.SqlServer.Server.SqlFunction(Name = "UTCBin2Time")]
  7. publicstatic SqlDateTime UTCBin2Time(byte[] data,int offset)
  8. {
  9. ????returnnew SqlDateTime(MyTime.ConverDateTimeFromJavaMilliSecond(BitConverter.ToUInt32(data, offset) * 1000L));
  10. }
  11. ?
  12. [Microsoft.SqlServer.Server.SqlFunction(Name = "getSum")]
  13. publicstatic SqlByte Sum(byte[] buffer, int startPos, int endPos)
  14. {
  15. ????byte b = 0;
  16. ????for (int i = startPos; i <= endPos; i++)
  17. ????{
  18. ????????b ^= buffer[i];
  19. ????}
  20. ????return b;
  21. }
  22. ?
  23. [Microsoft.SqlServer.Server.SqlFunction(Name = "updateSum")]
  24. publicstatic SqlBinary updateSum(byte[] buffer, int startPos, int endPos, int sumPos)
  25. {
  26. ????byte b = 0;
  27. ????for (int i = startPos; i <= endPos; i++)
  28. ????{
  29. ????????b ^= buffer[i];
  30. ????}
  31. ????buffer[sumPos] = b;
  32. ????returnnew SqlBinary(buffer);
  33. }
  34. ?
  35. ?
  36. [Microsoft.SqlServer.Server.SqlFunction(Name = "Int2Bin")]
  37. publicstatic SqlBinary Int2Bin(int number)
  38. {
  39. ????returnnew SqlBinary(BitConverter.GetBytes(number));
  40. }
  41. ?
  42. [Microsoft.SqlServer.Server.SqlFunction(Name = "Long2Bin")]
  43. publicstatic SqlBinary Long2Bin(long number)
  44. {
  45. ????returnnew SqlBinary(BitConverter.GetBytes(number));
  46. }
  47. [Microsoft.SqlServer.Server.SqlFunction(Name = "Bin2Int")]
  48. publicstatic SqlInt32 Bin2Int(byte[] data, int offset)
  49. {
  50. ????returnnew SqlInt32(BitConverter.ToInt32(data,offset));
  51. }
  52. [Microsoft.SqlServer.Server.SqlFunction(Name = "Bin2Long")]
  53. publicstatic SqlInt64 Bin2Long(byte[] data, int offset)
  54. {
  55. ????returnnew SqlInt64(BitConverter.ToInt64(data, offset));
  56. }
  57. [Microsoft.SqlServer.Server.SqlFunction(Name = "getByte")]
  58. publicstatic SqlByte getByte(byte[] data, int offset)
  59. {
  60. ????returnnew SqlByte(data[offset]);
  61. }
  62. [Microsoft.SqlServer.Server.SqlFunction(Name = "getBytes")]
  63. publicstatic SqlBytes getBytes(byte[] data, int offset,int count)
  64. {
  65. ????byte[] temp = newbyte[count];
  66. ????Array.Copy(data, offset, temp, 0, count);
  67. ????returnnew SqlBytes(temp);
  68. }

?

?

數據包的結構體(表類型)

  1. --交易擴展記錄
  2. CREATE TYPE [dbo].[DeviceTranscationEMV] ASTABLE
  3. (
  4. [RawData] VARBINARY(200) NOTNULL,
  5. [DeviceID] UNIQUEIDENTIFIERNOTNULL,
  6. [EMVType] TINYINTNOTNULL,
  7. [EMVNO] SMALLINTNOTNULL,
  8. [HardwareNo] INTNOTNULL,
  9. Meter INT,
  10. run INT,
  11. WORKINT,
  12. dead INT,
  13. StartTime DATETIME ,
  14. EndTime DATETIME
  15. )

?

?

SQL中借助CLR實現的轉換函數

?

  1. CREATEFUNCTION [dbo].[Binary2EMVTaxi]
  2. ????(
  3. ??????@data VARBINARY(MAX) ,
  4. ??????@offset INT = 1 ,
  5. ??????@withDeviceID BIT = 0
  6. ????)
  7. RETURNS @emv TABLE
  8. ????(
  9. ??????[RawData] BINARY(72) NOTNULL ,
  10. ??????[DeviceID] UNIQUEIDENTIFIER ,
  11. ??????[EMVType] TINYINTNOTNULL ,
  12. ??????[EMVNO] SMALLINTNOTNULL ,
  13. ??????[HardwareNo] INTNOTNULL ,
  14. ??????Meter INT ,
  15. ??????run INT ,
  16. ??????WORKINT ,
  17. ??????dead INT ,
  18. ??????StartTime DATETIME ,
  19. ??????EndTime DATETIME
  20. ????)
  21. AS
  22. ????BEGIN
  23. ????????DECLARE @c INT
  24. ????????DECLARE @sizeINT
  25. ????????DECLARE @sized INT
  26. ?
  27. ????????IF @withdeviceid = 1
  28. ????????????BEGIN
  29. ????????????????SET @sized = 16
  30. ????????????????SET @size = 72 + @sized
  31. ????????????END
  32. ????????ELSE
  33. ????????????BEGIN
  34. ????????????????SET @sized = 0
  35. ????????????????SET @size = 72
  36. ????????????END
  37. ?
  38. ????????SET @c = DATALENGTH(@data) / @size;
  39. ?
  40. ????????WITH sub
  41. ??????????????????AS ( SELECTSUBSTRING(@data, 1 + id * @size + @offset,
  42. ??????????????????????????????????????????@size) binDATA
  43. ???????????????????????FROM sys_id
  44. ???????????????????????WHERE id < @c
  45. ?????????????????????)
  46. ????????????INSERT @emv
  47. ????????????????????( rawdata ,
  48. ??????????????????????DeviceID ,
  49. ??????????????????????hardwareno ,
  50. ??????????????????????meter ,
  51. ??????????????????????run ,
  52. ??????????????????????WORK ,
  53. ??????????????????????dead ,
  54. ??????????????????????starttime ,
  55. ??????????????????????endtime ,
  56. ??????????????????????emvtype ,
  57. ??????????????????????emvno
  58. ????????????????????)
  59. ????????????????????SELECTCASE @withDeviceID
  60. ??????????????????????????????WHEN 0 THEN bindata
  61. ??????????????????????????????ELSESUBSTRING(bindata, 1 + @sized, @size)
  62. ????????????????????????????END ,
  63. ????????????????????????????CASE @withDeviceID
  64. ??????????????????????????????WHEN 0 THENNULL
  65. ??????????????????????????????ELSECAST (SUBSTRING(bindata, 1, @sized) ASUNIQUEIDENTIFIER)
  66. ????????????????????????????END ,
  67. ????????????????????????????dbo.Bin2Int(bindata, 0 + @sized) RecordNo ,
  68. ????????????????????????????dbo.Bin2Int(bindata, 4 + @sized) Meter ,
  69. ????????????????????????????dbo.Bin2Int(bindata, 8 + @sized) run ,
  70. ????????????????????????????dbo.Bin2Int(bindata, 12 + @sized) WORK ,
  71. ????????????????????????????dbo.Bin2Int(bindata, 16 + @sized) dead ,
  72. ????????????????????????????dbo.utcbin2time(bindata, 20 + @sized) StartTime ,
  73. ????????????????????????????dbo.utcbin2time(bindata, 24 + @sized) EndTime ,
  74. ????????????????????????????dbo.getByte(bindata, 61 + @sized) RecordType ,
  75. ????????????????????????????dbo.getByte(bindata, 62 + @sized) EMVNo
  76. ????????????????????FROM sub
  77. ????????RETURN
  78. ????END

?

  1. CREATEFUNCTION [dbo].[EMVTaxi2Binary]
  2. ????(
  3. ??????@emv DeviceTranscationEMV READONLY ,
  4. ??????@withDeviceID BIT = 0
  5. ????)
  6. RETURNSVARBINARY(MAX)
  7. AS
  8. ????BEGIN
  9. ????????DECLARE @bin VARBINARY(MAX)
  10. ????????SET @bin = 0x0
  11. ????????IF @withDeviceID = 0
  12. ????????????SELECT @bin = @bin + dbo.updatesum(dbo.int2Bin([HardwareNo])
  13. ????????????????????????????????????????????????+ dbo.int2Bin(meter)
  14. ????????????????????????????????????????????????+ dbo.int2Bin(run)
  15. ????????????????????????????????????????????????+ dbo.int2Bin(work)
  16. ????????????????????????????????????????????????+ dbo.int2Bin(dead)
  17. ????????????????????????????????????????????????+ dbo.time2utcbin(starttime)
  18. ????????????????????????????????????????????????+ dbo.time2utcbin(endtime)
  19. ????????????????????????????????????????????????+ CAST(0 ASBINARY(33))
  20. ????????????????????????????????????????????????+ CAST(emvtype ASBINARY(1))
  21. ????????????????????????????????????????????????+ CAST(emvno ASBINARY(1))
  22. ????????????????????????????????????????????????+ CAST (0 ASBINARY(1))
  23. ????????????????????????????????????????????????+ CAST(0 ASBINARY(7)) + 0x55,
  24. ????????????????????????????????????????????????0, 62, 63)
  25. ????????????FROM @emv
  26. ?
  27. ????????ELSE
  28. ????????????SELECT @bin = @bin + CAST (deviceid ASBINARY(16))
  29. ????????????????????+ dbo.updatesum(dbo.int2Bin([HardwareNo])
  30. ????????????????????????????????????+ dbo.int
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一页在线| 亚洲国产另类 国产精品国产免费| 亚洲影视中文字幕| 欧美影院成年免费版| 国产日韩欧美综合| 欧美性视频在线| 伦理中文字幕亚洲| 欧美极品欧美精品欧美视频| 精品一区精品二区| 国产日韩欧美自拍| 国内免费精品永久在线视频| 久久天天躁狠狠躁老女人| 精品自在线视频| 91av视频在线免费观看| 亚洲福利影片在线| 成人午夜在线影院| 精品成人在线视频| 欧美成人免费观看| 最新中文字幕亚洲| 国产午夜一区二区| 一本色道久久88综合亚洲精品ⅰ| 中文在线资源观看视频网站免费不卡| 欧美巨大黑人极品精男| 亚洲一区二区三区四区视频| 日韩精品极品毛片系列视频| 亚洲精品国产美女| 日韩电影中文字幕在线| 国产精品免费久久久久久| 国产精品69av| 在线亚洲国产精品网| 色爱av美腿丝袜综合粉嫩av| 国产专区欧美专区| 日韩精品极品视频免费观看| 中文字幕不卡在线视频极品| 视频在线观看一区二区| 亚洲欧美日韩一区二区在线| 影音先锋欧美在线资源| 久久久久国产精品www| 亚洲性xxxx| 久久精品国产亚洲| 一区二区三区动漫| 亚洲男人天堂2024| 亚洲成人免费网站| 国产精品欧美激情在线播放| 国产成人在线精品| 国产成人精品日本亚洲| 亚洲精品二三区| 日韩电影在线观看免费| 在线国产精品视频| 日韩中文综合网| 欧美黄色免费网站| 91在线直播亚洲| 欧美成人剧情片在线观看| 亚洲免费一级电影| 久久香蕉国产线看观看网| 亚洲国产精彩中文乱码av在线播放| 性视频1819p久久| xvideos国产精品| 91久久精品国产91久久性色| 91成人国产在线观看| 日韩成人在线免费观看| 欧美性受xxxx黑人猛交| 欧美性感美女h网站在线观看免费| 伊人成人开心激情综合网| 国产精欧美一区二区三区| 亚洲美女性生活视频| 亚洲影院污污.| 亚洲欧美第一页| 日韩视频免费中文字幕| 成人97在线观看视频| 精品国产依人香蕉在线精品| 一本色道久久88综合亚洲精品ⅰ| 久久久99免费视频| 成人黄色av播放免费| 成人网址在线观看| 91在线网站视频| 久久成人精品视频| 日韩在线观看成人| 亚洲新中文字幕| 国产福利视频一区| 在线免费看av不卡| 欧美华人在线视频| 国产精品免费久久久久久| 午夜伦理精品一区| 丝袜亚洲另类欧美重口| 久久亚洲欧美日韩精品专区| 日韩电影在线观看永久视频免费网站| 91精品国产高清久久久久久91| www.欧美精品一二三区| 久久精品国产亚洲一区二区| 亚洲国产日韩欧美在线动漫| 日韩中文字幕免费看| 欧美大奶子在线| 欧美日韩亚洲一区二区| 色偷偷91综合久久噜噜| 伊人精品在线观看| 亚洲精品一区二区在线| 欧美亚洲另类视频| 深夜福利国产精品| 在线观看久久久久久| 亚洲第一色在线| 精品久久久久久久久久久| 91干在线观看| 欧美在线视频观看| 欧美日韩国内自拍| 亚洲天堂影视av| 欧美日韩中文字幕综合视频| 欧美香蕉大胸在线视频观看| 91久久久久久国产精品| 久久成人综合视频| 欧美小视频在线| 国产精品永久免费视频| 精品欧美一区二区三区| 亚洲九九九在线观看| 欧美激情高清视频| 亚洲精品一区二区网址| 一本色道久久综合狠狠躁篇怎么玩| 2019中文在线观看| 97成人精品区在线播放| 欧美日韩国产页| 欧美日韩视频在线| 国产精品国模在线| 亚洲香蕉在线观看| 日本国产一区二区三区| 亚洲国产精品免费| 欧美成人中文字幕| 黄色精品一区二区| 久久成人国产精品| 亚洲少妇激情视频| 亚洲香蕉av在线一区二区三区| 欧美成人一区在线| 日韩视频免费观看| 欧美中文在线免费| 亚洲夜晚福利在线观看| 97碰在线观看| 不卡中文字幕av| 欧美精品在线观看| 亚洲乱码一区av黑人高潮| 欧美丰满少妇xxxxx| 日韩成人在线视频网站| 88国产精品欧美一区二区三区| www国产精品视频| www日韩中文字幕在线看| 欧美夫妻性生活xx| 岛国视频午夜一区免费在线观看| 一区二区三区四区视频| 国产丝袜视频一区| 91在线免费观看网站| 久久99精品国产99久久6尤物| 米奇精品一区二区三区在线观看| 俺去了亚洲欧美日韩| 992tv成人免费影院| 国产精品国产三级国产专播精品人| 精品欧美激情精品一区| 亚洲国产91色在线| 国产精品久久久久免费a∨大胸| 久热在线中文字幕色999舞| 国产欧洲精品视频| 国产精品wwww| 中文精品99久久国产香蕉| 日韩在线观看精品| 亚洲成人久久久久| 日韩精品视频免费在线观看| 国产精品久久电影观看|