我正在设计一个数据库应用程序,并具有一个表单,其中填充了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());
    }


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

最佳答案

列名不能使用变量。您必须构造将列名嵌入到字符串中的sql字符串。

string commandText =
  "UPDATE tblCases SET [" + strField + "] = @InputVal WHERE CaseNo = @CaseNoVal;"


但是您必须检查strField的值以进行sql注入攻击。

09-27 01:48
查看更多