我在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();
}
即使我尝试了其他值,它总是在编辑框中返回-1 上午。这些值存在于我的数据库中,如果我尝试在我的数据库中执行查询,它就可以工作 很好,并返回正确的ID。
答案 0 :(得分: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)
);