0

我想首先声明我不是网络人,所以我不知道这些警告/错误有多严重。正在运行的服务似乎正在创建一堆“无效数据类型”警告,这些警告在 Wireshark 跟踪中显示为“格式错误的数据包”。WireShark 跟踪太大,无法在此处附加,但我将在其中发布关键组件。

在 Wireshark 中,当我单击“专家信息”时,它会显示一个数据包列表。出现称为“无效数据类型”的某个“警告”。当我展开此警告时,有一堆“远程过程调用[格式错误的数据包]/协议/TDS 条目。

我单击第一个,它直接将我带到跟踪中的这个数据包。在那里,它表明“参数”的长度无效。

名称长度:62 名称:名称:\340\240\213@ENDTIME\342\250\200\340\240\207\350\274\240\341\204\276\346\225\226\340\254 \276\344\200\211\344\270\200\345\224\200\344\264\200\345\220\200\345\210\200\344\204\200\344\270\200 \345\214\200 类型信息(无效数据类型:00)

如果我将此“作为可打印文本”复制,它会显示一堆随机字符:

@ENDTIME* >Ve> @NUMTRANS& @NUMPAGES& @NUMCHECKS&@BATC

我不知道“* >Ve>”是从哪里来的。它肯定不在代码中。

如果我备份到为此数据包传入的第一个参数,它会为我提供导致问题的整个查询。

长度:552 数据 [截断]:插入 stats.FFX_BATCHINFO(BATCHNUMBER,BATCHTYPE,SCANSTATIONID,SCANUSERID,STARTTIME,ENDTIME,NUMTRANS,NUMPAGES,NUMCHECKS,BATCHTOTAL)值(@BATCHNUMBER,@BATCHTYPE,@SCANSTATIONID,@SCANUSERID,@STARTTIME ,

我还注意到它上面的查询在@STARTTIME 停止。根据代码,下一个参数是@ENDTIME,这是它似乎有问题的参数。

该查询的代码如下所示:

string query = string.Format("Insert Into {0}(BATCHNUMBER, BATCHTYPE, SCANSTATIONID, SCANUSERID, STARTTIME, ENDTIME"
                                    + ", NUMTRANS, NUMPAGES, NUMCHECKS, BATCHTOTAL, SOLUTIONINTERNALID"
                                    + ")"
                                    + " Values(" + 
dbManager.ParamName("BATCHNUMBER") + ", " + dbManager.ParamName("BATCHTYPE") + ", " + dbManager.ParamName("SCANSTATIONID")
                                    + ", " + 
dbManager.ParamName("SCANUSERID") + ", " + dbManager.ParamName("STARTTIME") + ", " + dbManager.ParamName("ENDTIME")
                                    + ", " + 
dbManager.ParamName("NUMTRANS") + ", " + dbManager.ParamName("NUMPAGES") + ", " + dbManager.ParamName("NUMCHECKS")
                                     + ", " + dbManager.ParamName ("BATCHTOTAL") + ", " + dbManager.ParamName ("SOLUTIONINTERNALID")
                                    + ")", GlobalUtil.TableWithSchema ( "FFX_BATCHINFO"));

dbManager.OpenConnection();
dbManager.BeginTransaction();
IDbCommand idbCommand = null;

idbCommand = dbManager.GetCommand(CommandType.Text, query);

idbCommand.Parameters.Add(dbManager.CreateParam("@BATCHNUMBER", DbType.String, batchInfo.BATCHNUMBER));
idbCommand.Parameters.Add(dbManager.CreateParam("@BATCHTYPE", DbType.String, batchInfo.BATCHTYPE));

idbCommand.Parameters.Add(dbManager.CreateParam("@SCANSTATIONID", DbType.String, batchInfo.SCAN_STATIONID));
idbCommand.Parameters.Add(dbManager.CreateParam("@SCANUSERID", DbType.String, batchInfo.SCAN_USERID));
idbCommand.Parameters.Add(dbManager.CreateParam("@STARTTIME", DbType.DateTime2, batchInfo.STARTTIME));
idbCommand.Parameters.Add(dbManager.CreateParam("@ENDTIME", DbType.DateTime2, batchInfo.ENDTIME));
idbCommand.Parameters.Add(dbManager.CreateParam("@NUMTRANS", DbType.Int32, batchInfo.NUMTRANS));
idbCommand.Parameters.Add(dbManager.CreateParam("@NUMPAGES", DbType.Int32, batchInfo.NUMPAGES));
idbCommand.Parameters.Add(dbManager.CreateParam("@NUMCHECKS", DbType.Int32, batchInfo.NUMCHECKS));
idbCommand.Parameters.Add(dbManager.CreateParam("@BATCHTOTAL", DbType.Double, batchInfo.BATCHTOTAL));

idbCommand.Parameters.Add(dbManager.CreateParam("@SOLUTIONINTERNALID", DbType.Int64, batchInfo.SOLUTIONINTERNALID));

dbManager.ExecuteNonQuery();

dbManager.DisposeCommand();
dbManager.CommitTransaction();

所以,我不知道随机字符是如何或在哪里附加到数据包中的参数的。

任何帮助,将不胜感激。

附加信息:

  • 服务正在使用 .Net Framework 4。
  • 该服务在 Windows Server 2012 R2 上运行。
  • 它连接的数据库是 SQL Server 2014。
4

0 回答 0