2

我需要将变量的值用作我正在生成的 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)); 

对其他选择持开放态度。所有帮助将不胜感激。

4

2 回答 2

8

因为 for 的值amountfield来自您的代码逻辑,所以您可以安全地执行以下操作:

var sql = new sqlCommand(String.Format("INSERT INTO Payments_TBL(column1,column2,{0},column3,....)Values(@value,@value,@value)", amountcolumn),new sqlConnection(conn));

但是永远不要对来自用户的字符串做这样的事情,因为这会让你打开 SQL 注入。

于 2012-10-05T12:47:33.113 回答
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));

或者

var sql = new sqlCommand(
                   String.Format("INSERT INTO Payments_TBL(column1,column2,  
                   {0},column3,....)Values(@value,@value,@value)", amountfield), 
                   new sqlConnection(conn));
于 2012-10-05T12:46:16.180 回答