Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#中的Update命令不更新数据库_C#_Asp.net_Sql_Sql Update - Fatal编程技术网

c#中的Update命令不更新数据库

c#中的Update命令不更新数据库,c#,asp.net,sql,sql-update,C#,Asp.net,Sql,Sql Update,我找到了一种解决这个问题的方法:将数据库中的数据加载到一组控件中,并将更新信息嵌入到一组单独的控件中。谢谢你的评论;应用程序正在运行 正在尝试更新数据库行。我根据在几个论坛/网站上找到的内容编写了以下代码。代码没有更新数据库 在尝试修复此错误后,我发现了以下问题:如果@editFirstName的值是文本,则数据库将正确更新,如中所示 UpdateCmd.Parameters["@editFirstName"] = "George"; 我也试过了 UpdateCmd.Param

我找到了一种解决这个问题的方法:将数据库中的数据加载到一组控件中,并将更新信息嵌入到一组单独的控件中。谢谢你的评论;应用程序正在运行

正在尝试更新数据库行。我根据在几个论坛/网站上找到的内容编写了以下代码。代码没有更新数据库

在尝试修复此错误后,我发现了以下问题:如果@editFirstName的值是文本,则数据库将正确更新,如中所示

      UpdateCmd.Parameters["@editFirstName"] = "George";
我也试过了

  UpdateCmd.Parameters["@editFirstName"] = "'" + editFirstNameContent.Text + "'";
这是行不通的

我还尝试将文本框数据放入变量并使用该变量:

   string firstNameValue = editFirstNameContent.Text;
   UpdateCmd.Parameters["@editFirstName"] = firstNameValue;
这是行不通的

因此,UPDATE命令显然是在更新数据库。但是,显然Parameters.Value行没有读取文本框中的数据,因此它没有使用更改的值进行更新

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();
    }
}

我不确定MS SQL Server如何处理自动提交,但如果未启用自动提交模式,则需要手动提交事务(
UpdateCmd.transaction.commit
)。

SQL Profiler随SQL Management Studio提供。在执行代码时运行此命令,以查看实际执行的命令

下面是关于如何使用探查器的教程

我会检查一下

Request.QueryString[“EID”]

确实包含正确的customerId值,因为如果您试图更新不存在的行,这可能会导致语句运行但不更新数据

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

command.Parameters.Add(“@editCustomerID”,SqlDbType.Int).Value=editCustomerIDContent.Text


正如Ash所建议的,准确了解发生了什么的最好方法是在执行命令时对数据库运行探查器(注意:这可能会影响性能,应该在测试/开发系统上或在小时之外执行)

为什么要使用所有这些参数,然后在命令的末尾仍然有concat。当您通过parameters.add添加更新的值时,还应该通过parameters.add逐个传递QueryString参数。add可以避免SQL注入。为什么要更新customerID,这可能是您的PK?是否有错误?尝试在其周围放置一个
Try{…}catch(Exception ex).
块-是否存在异常?什么数据类型是
客户ID
??如果它应该是一个字符串,那么您需要在它周围加上单引号!或者更好:使用参数!什么数据库和哪个版本??SQL只是结构化查询语言——一种被许多数据库系统使用的语言——SQL不是一种数据库产品……灰烬——我这样做是因为这正是在我发现的几个不同来源上编写示例代码的方式;否-由于没有显式事务,UPDATE语句将在隐式事务中运行,并在最后提交自己…那么我是否应该这样做?如果是,我该怎么做?MSDN上的所有示例都是无用的,因为我正在nopt使用绑定到gridview的sqldatasource等。如果UPDATE语句隐式运行,为什么它不更新信息?