我需要使用变量的值作为我生成的SQL插入查询中的一个字段。 在PHP中我这样做:
if($currency = "USD")
{
$columntoinsert = "USD_Currency";
}
else
{
$columntoinsert = "";
}
然后在我的SQL语句中,我会像这样执行查询:
$sqlinsertpayment = sqlsrv_query($connect,"INSERT INTO Payments_TBL(column1,column2,$columntoinsert,columnn)VALUES(????)",$params) or die("An error occurred trying to execute the statement");
我想在C#中做同样的事情。我有以下代码来设置我想要使用的列
var amountfield = "";
if (save_currency != "USD")
{
amountcolumn = "Amount";
}
else
{
amountcolumn = "USD_Amount";
}
但我无法执行我的sql查询,因为在查询字符串中尝试使用amountcolumn
会产生预期的Invalid column name
错误。如何以这种方式使用变量:
var sql = new sqlCommand("INSERT INTO Payments_TBL(column1,column2,myc#variablevaluehere,column3,....)Values(@value,@value,@value)",new sqlConnection(conn));
对其他选择开放。所有帮助将不胜感激。
答案 0 :(得分:8)
因为amountfield
的值来自您的代码逻辑,所以您可以安全地执行此操作:
var sql = new sqlCommand(String.Format("INSERT INTO Payments_TBL(column1,column2,{0},column3,....)Values(@value,@value,@value)", amountcolumn),new sqlConnection(conn));
但是从来没有使用来自用户的字符串来做这样的事情,因为这会让你打开SQL注入。
答案 1 :(得分:3)
及其
var amountfield = save_currency != "USD" ? "Amount" : "USD_Amount";
var sql = new sqlCommand("INSERT INTO Payments_TBL(column1,column2,"
+ amountcolumn +
",column3,....)Values(@value,@value,@value)",new sqlConnection(conn));
OR
var sql = new sqlCommand(
String.Format("INSERT INTO Payments_TBL(column1,column2,
{0},column3,....)Values(@value,@value,@value)", amountfield),
new sqlConnection(conn));