当我在sqlcommand代码中使用AND时,它仅跟随最后一位
SqlCommand^ FinArstiCmd = gcnew SqlCommand("SELECT * FROM ARSTI1 WHERE SLIMID='
@SlimuID ' AND UNIQJOBID=' @JobID ';", con);
FinArstiCmd->Parameters->Add("@SlimuID", SqlDbType::VarChar);
FinArstiCmd->Parameters->Add("@JobID", SqlDbType::VarChar);
FinArstiCmd->Parameters["@SlimuID"]->Value = SlimId1;
FinArstiCmd->Parameters["@JobID"]->Value = JobID1;
SqlDataReader^ FinArstRead;
try {
con->Open();
String^ ArstaVards;
FinArstRead = FinArstiCmd->ExecuteReader();
while (FinArstRead->Read()){
ArstaVards = FinArstRead["FULL_NAME"]->ToString();
listBox1->Items->Add(ArstaVards);
}
con->Close();
}
catch (Exception^ ex) {
MessageBox::Show(ex->Message);
}
当我使用上面的代码时,它将输出数据库中只有正确的@jobid的每一行,而不输出两个参数都正确的
答案 0 :(得分:0)
坦率地说,我不太确定为什么看到的行全部返回(除了您的条目中SLIMID的字面值为@SlimuID
,而UNIQJOBID的值为@JobID
)。这真的是您使用的代码还是一些模拟的示例?
无论如何,不要将参数放在引号中:
SqlCommand^ FinArstiCmd = gcnew SqlCommand("SELECT * FROM ARSTI1 WHERE SLIMID='
@SlimuID ' AND UNIQJOBID=' @JobID ';", con);
通过这种方式,SQL解析器认为您正在寻找列@SlimuID
的实际值SLIMID
。
正确:
SqlCommand^ FinArstiCmd = gcnew SqlCommand("SELECT * FROM ARSTI1 WHERE SLIMID=
@SlimuID AND UNIQJOBID=@JobID;", con);
关于参数化查询的另一个好处是,正确的报价-如果需要,请考虑INT值,将由数据库引擎处理。