我找到了解决这个特殊问题的方法:将数据库中的数据加载到一组控件中,并将更新信息导入一组单独的控件中。感谢您的评论;该申请正在运作。
尝试更新数据库行。我根据我在几个论坛/网站上发现的内容编写了以下代码。他的代码没有更新数据库。
在尝试修复此错误之后,我发现了以下内容:如果@editFirstName的值是文字,数据库将正确更新,如
UpdateCmd.Parameters["@editFirstName"] = "George";
我也试过
UpdateCmd.Parameters["@editFirstName"] = "'" + editFirstNameContent.Text + "'";
哪个不起作用。
我还尝试将TextBox数据放入变量并使用变量:
string firstNameValue = editFirstNameContent.Text;
UpdateCmd.Parameters["@editFirstName"] = firstNameValue;
哪个不起作用。
因此,UPDATE命令显然正在更新数据库。但是,显然,Parameters.Value行不会读取TextBox中的数据,因此不会使用更改后的值进行更新。
protected void editCustomerButton_Click(object Sender, EventArgs e)
{
string connString = WebConfigurationManager.ConnectionStrings["proofreadThePlanetConnectionString"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connString))
{
connection.Open();
string updateString = "UPDATE tblCustomerInfo SET customerID=@editCustomerID, customerFirstName=@editFirstName, customerLastName=@editLastName, customerEmail=@editEmail WHERE customerID=" + Request.QueryString["EID"];
SqlCommand UpdateCmd = new SqlCommand(updateString, connection);
UpdateCmd.Parameters.Add("@editCustomerID", SqlDbType.Int);
UpdateCmd.Parameters["@editCustomerID"].Value = editCustomerIDContent.Text;
UpdateCmd.Parameters.Add("@editFirstName", SqlDbType.VarChar, 25);
UpdateCmd.Parameters["@editFirstName"].Value = editFirstNameContent.Text;
UpdateCmd.Parameters.Add("@editLastName", SqlDbType.VarChar, 50);
UpdateCmd.Parameters["@editLastName"].Value = editLastNameContent.Text;
UpdateCmd.Parameters.Add("@editEmail", SqlDbType.VarChar, 75);
UpdateCmd.Parameters["@editEmail"].Value = editEmailContent.Text;
UpdateCmd.ExecuteNonQuery();
}
}
答案 0 :(得分:2)
我不确定MS SQL Server如何处理自动提交,但如果未启用自动提交模式,则需要手动提交事务(UpdateCmd.Transaction.Commit
)。
答案 1 :(得分:0)
SQL Profiler附带SQL Management Studio。在执行代码时运行此命令以查看实际执行的命令。
以下是有关如何使用分析器的教程。
答案 2 :(得分:0)
我会检查
Request.QueryString["EID"]
确实包含正确的 customerId 值,因为如果您尝试更新不存在的行,这可能导致语句运行但没有数据需要更新。
为确保正确设置参数值,您可以尝试以下格式;
command.Parameters.Add("@editCustomerID", SqlDbType.Int).Value = editCustomerIDContent.Text;
正如Ash所建议的那样,确切地知道发生了什么的最好方法是在执行命令时对数据库运行Profiler(注意:这会对性能产生影响,应该在Test / Dev上完成系统或非工作时间)