0

我在 C++Builder 中有这段代码。

void __fastcall TForm1::Button1Click(TObject *Sender)
{

AnsiString am="2323246";

   Form1->ADOQuery1->SQL->Text="SELECT T_ID FROM TABLE WHERE TABLE.T_AM='"+am+"'";

   Form1->Edit1->Text=Form1->ADOQuery1->ExecSQL();

}

即使我尝试了 am 的其他值,它也总是在编辑框中返回 -1。这些值存在于我的数据库中,如果我尝试在我的数据库中执行查询,它就可以正常工作并返回正确的 ID。

4

1 回答 1

0

T_AM 是什么变量类型?如果它是整数或浮点数,请丢失引号。另外,查看准备好的查询或语句。这种类型的查询容易受到 SQL 注入的攻击。例子:

PrepareSQL("SELECT T_ID FROM TABLE WHERE T_AM = %d", am);
ExecSQL();

您需要检查 API 文档以了解执行此操作的确切语义和语法。

查看 API,您需要执行以下操作:

VARIANT vName;
vName.vt = VT_BSTR; //Variant type for BSTR
vName.bstrVal = _bstr_t("2323246");

Form->ADOQuery1->Parameters->Append(
    Form->ADOQuery1->CreateParameter(_bstr_t("T_AM"),adChar,adParamInput,50,vName)
);
于 2013-07-03T10:34:35.203 回答