strSql.Format(_T("INSERT INTO Bill_Info
(Bill_ID,Buyer_Name,Buyer_Book,Buyer_State,Price)
values('%s','%s','s','%d','%f')"),
b.getbid(), b.getbname(), b.getbbook(), b.getbstate(), b.getprice());
Buyer_Book 對應參數 b.getbbook()(推測為 CString),但格式字串寫死 's',缺少 %s 佔位符。%d 對到 CString 指標值,%f 對到整數,產生亂碼與極大浮點數。values('퀘\x18','癮污摩猠牴湩潰楳楴湯촀췍췍췍췍﷽﷽ꮫꮫꮫꮫﻮﻮ','s','-858993460','-925596313493178310000000000000000000000000000000000000000000000.000000',明顯為記憶體誤讀。
strSql.Format(_T("INSERT INTO Bill_Info
(Bill_ID,Buyer_Name,Buyer_Book,Buyer_State,Price)
values('%s','%s','%s','%d','%f')"), // 第 3 個 %s 補上
b.getbid(), b.getbname(), b.getbbook(), b.getbstate(), b.getprice());
避免手動拼接 SQL,防止注入與格式錯誤:
// 使用 ADO 參數化
_CommandPtr cmd;
cmd->CommandText = "INSERT INTO Bill_Info (Bill_ID,Buyer_Name,Buyer_Book,Buyer_State,Price) VALUES (?,?,?,?,?)";
cmd->Parameters->Append(cmd->CreateParameter("p1", adVarChar, adParamInput, 50, b.getbid()));
cmd->Parameters->Append(cmd->CreateParameter("p2", adVarChar, adParamInput, 100, b.getbname()));
cmd->Parameters->Append(cmd->CreateParameter("p3", adVarChar, adParamInput, 100, b.getbbook()));
cmd->Parameters->Append(cmd->CreateParameter("p4", adInteger, adParamInput, , b.getbstate()));
cmd->Parameters->Append(cmd->CreateParameter("p5", adDouble, adParamInput, , b.getprice()));
cmd->Execute(NULL, NULL, adCmdText);
CString 對應 %s,int 對應 %d,double/float 對應 %f(注意 %lf 為 scanf 專用)。_T() 宏確保字串常值為寬字元。