SqlCommand.ExecuteNonQuery()不更新我的数据库

PJW*_*PJW 2 c# sql

我正在设计一个数据库应用程序,并且有一个表单,其中填充了来自数据库的数据.如果用户双击表单上的任何文本框,他们可以使用输入框更改值,然后输入框执行以下代码以更新数据库.

 private void ProcessChanges(string strField, string strCurrentValue)
    {
        //...Connect To Database...//

        string strCaseNo = txtCaseNo.Text;
        string strConnect = BuildConnectionString();
        SqlConnection linkToDB = new SqlConnection(strConnect);
        linkToDB.Open();

        //...Request User Input New Value...//

        string strMessage = "Enter ammended details and click OK," + Environment.NewLine +
                                "or click Cancel to exit.";
        string strInput = Interaction.InputBox(strMessage, "Case Details", strCurrentValue);

        //...Send User Input to Database...//

        string commandText = "UPDATE tblCases SET @FieldVal = @InputVal WHERE CaseNo = @CaseNoVal;";
        SqlCommand sqlCom = new SqlCommand(commandText, linkToDB);
        sqlCom.Parameters.Add("@FieldVal", SqlDbType.Text);
        sqlCom.Parameters.Add("@InputVal", SqlDbType.Text);
        sqlCom.Parameters.Add("@CaseNoVal", SqlDbType.VarChar);
        sqlCom.Parameters["@FieldVal"].Value = strField;
        sqlCom.Parameters["@InputVal"].Value = strInput;
        sqlCom.Parameters["@CaseNoVal"].Value = strCaseNo;
        int intQuery = sqlCom.ExecuteNonQuery();
        MessageBox.Show(intQuery.ToString());
    }
Run Code Online (Sandbox Code Playgroud)

问题是数据库根本没有更新.我知道连接正常,因为在我的应用程序中使用了相同的ConnectionStringBuilder.我还在最后添加了消息框,它告诉我ExecuteNonQuery()的返回值是'1',这表明行已经更新.然而,我的数据库没有任何变化,现在真的很烦我.

Jan*_*Jan 7

您不能将变量用于列名称.您必须构造您的sql字符串,列名称嵌入到字符串中.

string commandText = 
  "UPDATE tblCases SET [" + strField + "] = @InputVal WHERE CaseNo = @CaseNoVal;"
Run Code Online (Sandbox Code Playgroud)

但是你必须检查strFieldsql注入攻击的值.