当查询字符串包含“!”时,Firedac Sqlite 查询失败
Firedac Sqlite Query fails when query string contains "!"
我正在尝试将记录从另一个数据库加载到 SQLite 中。我正在使用 Delphi 10.4 (Firemonkey) 和一个 FireDAC 查询组件。当我将以下查询字符串传递给查询组件时:
INSERT INTO BrandName (BrandName, WebSite, Email) values ("Mount It!", "", "")
失败并出现以下异常:
Project MigrateData.exe raised exception class ESQLiteNativeException with message '[FireDAC][Phys][SQLite] Error: 2 values for 3 columns'.
当我删除“!”根据文件中的记录,它可以正常处理,如果我 运行 在 SQLite 数据库浏览器中执行此查询,它也会正常执行。
我正在使用 sqlite3.dll 3.36 版。这是我正在使用的代码,希望对您有所帮助:
with MemDataMod.BrandTable do begin
First;
while not EOF do begin
SQLStr := 'INSERT INTO BrandName (BrandName, WebSite, Email)'
+ ' values ("' + FieldByName('BrandName').AsString + '", "'
+ FieldByName('WebSite').AsString + '", "'
+ FieldByName('Email').AsString + '")';
MySQLDB.BlankQuery.SQL.Clear;
MySQLDB.BlankQuery.SQL.Append(SQLStr);
MySQLDB.BlankQuery.ExecSQL;
Next;
end;
end;
我无法想象为什么“!”会有所作为,但它似乎。任何帮助将不胜感激。
!
(感叹号)字符和其他几个字符需要在 FireDAC SQL 中进行特殊处理,因为它们在其中具有特殊含义。
这在 "Special Character Processing" section of the Preprocessing Command Text (FireDAC) 文档中有完整记录,请参阅该部分中的 ResourceOptions MacroCreate
、MacroExpand
、EscapeExpand
属性。
顺便说一句,通过连接包含用户输入的文本或从中派生的字段值来构造 SQL 是个坏主意,因为它容易受到 SQL Injection Attacks.
的攻击
我正在尝试将记录从另一个数据库加载到 SQLite 中。我正在使用 Delphi 10.4 (Firemonkey) 和一个 FireDAC 查询组件。当我将以下查询字符串传递给查询组件时:
INSERT INTO BrandName (BrandName, WebSite, Email) values ("Mount It!", "", "")
失败并出现以下异常:
Project MigrateData.exe raised exception class ESQLiteNativeException with message '[FireDAC][Phys][SQLite] Error: 2 values for 3 columns'.
当我删除“!”根据文件中的记录,它可以正常处理,如果我 运行 在 SQLite 数据库浏览器中执行此查询,它也会正常执行。
我正在使用 sqlite3.dll 3.36 版。这是我正在使用的代码,希望对您有所帮助:
with MemDataMod.BrandTable do begin
First;
while not EOF do begin
SQLStr := 'INSERT INTO BrandName (BrandName, WebSite, Email)'
+ ' values ("' + FieldByName('BrandName').AsString + '", "'
+ FieldByName('WebSite').AsString + '", "'
+ FieldByName('Email').AsString + '")';
MySQLDB.BlankQuery.SQL.Clear;
MySQLDB.BlankQuery.SQL.Append(SQLStr);
MySQLDB.BlankQuery.ExecSQL;
Next;
end;
end;
我无法想象为什么“!”会有所作为,但它似乎。任何帮助将不胜感激。
!
(感叹号)字符和其他几个字符需要在 FireDAC SQL 中进行特殊处理,因为它们在其中具有特殊含义。
这在 "Special Character Processing" section of the Preprocessing Command Text (FireDAC) 文档中有完整记录,请参阅该部分中的 ResourceOptions MacroCreate
、MacroExpand
、EscapeExpand
属性。
顺便说一句,通过连接包含用户输入的文本或从中派生的字段值来构造 SQL 是个坏主意,因为它容易受到 SQL Injection Attacks.
的攻击