2011-08-14 65 views
0

我发现一个解决这个问题的解决方法:将来自数据库的数据加载到一组控件中,并将更新信息输入到一组单独的控件中。感谢您的评论;该应用程序正在工作。c#中的更新命令不更新数据库

试图更新数据库行。我根据我在几个论坛/网站上找到的内容编写了以下代码。他的代码没有更新数据库。该数据库将正确地更新,如果@editFirstName的值是文字,如

 UpdateCmd.Parameters["@editFirstName"] = "George"; 

我也试过

UpdateCmd.Parameters["@editFirstName"] = "'" + editFirstNameContent.Text + "'"; 

尝试任何修复这个错误我发现了以下后

哪些没有工作。

我也试图把文本框的数据到一个变量,使用这个变量:

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 [email protected], [email protected], [email protected], [email protected] 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(); 
    } 
} 
+6

为什么你使用所有这些参数,然后在你的命令结尾仍然有concat。 –

+0

当您通过Parameters.Add添加更新的值时,您还应该通过Parameters.Add传递QueryString参数以避免SQL注入。你为什么更新customerID,这可能是你的PK? – devio

+0

你有错误吗?尝试放一个'try {...} catch(Exception ex)...'阻止它 - 有例外吗?什么样的数据类型是'customerID'?如果它应该是一个字符串,那么你需要在它周围加单引号!或更好:**使用参数!** –

回答

2

我不知道MS SQL Server如何处理自动提交,但在情况下,自动提交模式未开启,您将需要手动提交您的事务(UpdateCmd.Transaction.Commit)。

+1

否 - 因为没有显式事务,所以UPDATE语句将在隐式事务中运行并在末尾提交自己... –

+0

因此,我应该做这个或没有?如果是这样,我该怎么做? MSDN上的所有示例都是无用的,因为我使用绑定到gridview的sqldatasource等。 –

+0

如果UPDATE语句隐式运行,为什么它不更新信息? –

0

我会检查

Request.QueryString["EID"]

确实包含正确客户ID值,因为这可能会导致语句来运行,但没有数据被更新,如果你是试图更新一个不存在的行。

为确保正确设置参数值,您可以尝试以下格式;

command.Parameters.Add("@editCustomerID", SqlDbType.Int).Value = editCustomerIDContent.Text;

通过灰分,找出到底发生了什么将是对数据库运行事件探查器在执行命令的最佳方式建议(注:这可能会影响性能和应在测试/开发系统或者非工作时间内完成)