我正在设计一个数据库应用程序,并具有一个表单,其中填充了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注入攻击。