c#系统.数据.SQLite. SQLite异常:“SQL逻辑错误无法识别的标记:“#”“

j1dl9f46  于 2022-12-29  发布在  SQLite
关注(0)|答案(1)|浏览(269)

我想捕获网络流量,并保存在我的数据库中的ASCII码,我仍然得到这个(它是数据库中不支持的字符?):
未处理的异常。代码=错误(1),消息=系统.数据. SQLite. SQLite异常(0x800007BF):SQL逻辑错误无法识别的标记:"#"位于系统.数据. SQLite.SQLite3.准备(SQLiteConnection cnn,字符串strSql,SQLiteStatement previous,UInt32超时MS,字符串& strRemain)位于系统.数据. SQLite.SQLiteCommand.构建下一个命令()位于系统.数据. SQLite.SQLiteDataReader.下一个结果()位于系统.数据. SQLite.SQLiteDataReader. ctor(SQLiteCommand cmd,命令行为行为)位于系统。数据。SQLite。SQLite命令。执行读取器(命令行为行为行为)位于系统。数据。SQLite。SQLite命令。在C:\用户\管理员\CSharp\数据包网络主机\数据包网络主机\示例\捕获和解析数据包\Main.cs中的捕获和解析数据包. MainClass. Main(字符串[]参数)处执行非查询(命令行为行为):第196行
下面是我代码:

try
    {
        string sql = $"insert into log (Time, TYPE, DstIP, DstPort, SrcIP, SrcPort, Flag, TotalPacketLength, AsciiCode) values ('{DateTime.Now.ToString("yyyy'-'MM'-'dd HH:mm:ss")}', 'TCP', '{ipPacket.DestinationAddress}', '{tcpPacket.DestinationPort}', '{ipPacket.SourceAddress}', '{tcpPacket.SourcePort}', '{tcpPacket.Flags}', '{tcpPacket.TotalPacketLength}', '{ipPacket.PrintAscii()}')";
        SQLiteCommand command = new SQLiteCommand(sql, m_dbconnection);
        command.ExecuteNonQuery();
        m_dbconnection.Close();
    }
catch(Exception) //if Ascii code is too long
    { 
    string sql = $"insert into log (Time, TYPE, DstIP, DstPort, SrcIP, SrcPort, Flag, TotalPacketLength, AsciiCode) values ('{DateTime.Now.ToString("yyyy'-'MM'-'dd HH:mm:ss")}', 'TCP', '{ipPacket.DestinationAddress}', '{tcpPacket.DestinationPort}', '{ipPacket.SourceAddress}', '{tcpPacket.SourcePort}', '{tcpPacket.Flags}', '{tcpPacket.TotalPacketLength}', 'Encrypted Code')";
        SQLiteCommand command = new SQLiteCommand(sql, m_dbconnection);
        command.ExecuteNonQuery();
        m_dbconnection.Close();
    }

这是我的数据库结构:

string sql = "create table log(PacketID INTEGER PRIMARY KEY AUTOINCREMENT, Time DATETIME," +
                    "TYPE CHAR(6) NULL DEFAULT '', DstIP varchar(15), DstPort INT, SrcIP varchar(15), SrcPort INT, Flag varchar(2), TotalPacketLength INT, AsciiCode BLOB)";
                SQLiteCommand command = new SQLiteCommand(sql, m_dbconnection);
                command.ExecuteNonQuery();
nhhxz33t

nhhxz33t1#

我在另一个答案中提供了一个简单的 Package 类。
你不应该像现在这样构建一个SQL命令。你会被SQL-Injection打开,这是不好的。通过直接使用一个与你的表匹配的类结构对象,这可能会提供更好的控制和可读性,而不会暴露于注入和字符串命令的错误格式。

相关问题