【问题标题】:How to update a database with SQL call using parameters (Foreign Key)?如何使用参数(外键)通过 SQL 调用更新数据库?
【发布时间】:2020-04-27 20:21:57
【问题描述】:

更新外键 ID 时出现问题。因此,当此 SQL 调用启动时,外键 LocationID 不会更新,但 Question 属性会更新。有什么理由会这样吗?

// Set strSQL to empty string.
String strSQL = "";

// Develop SQL call.
strSQL = "UPDATE Question ";
strSQL +=   "SET LocationID = @LocationID, Question = @Question ";
strSQL += "WHERE LocationID = @OldLocationID";

// Define the network connection to the SQL Server database.
SqlConnection objSqlConnection = new SqlConnection(WebConfigurationManager.ConnectionStrings["2020LJCDT"].ConnectionString);

// Set up the SQL command object
SqlCommand objSqlCommand = new SqlCommand();
objSqlCommand.Connection = objSqlConnection;
objSqlCommand.CommandType = CommandType.Text;
objSqlCommand.CommandText = strSQL;

// Define the input parameters
objSqlCommand.Parameters.AddWithValue("@LocationID", ddlLocation.SelectedValue);
objSqlCommand.Parameters.AddWithValue("@Question", txtQuestion.Text);
objSqlCommand.Parameters.AddWithValue("@OldLocationID", lblLocationID.Text);

// Open the connection
objSqlConnection.Open();

// Get number of rows affected. 
numberOfRecords = objSqlCommand.ExecuteNonQuery();

//Close the data reader and the connection.
objSqlConnection.Close();

【问题讨论】:

  • 确保@LocationID 具有正确的值并检查相同的查询是否直接针对db 正确运行。
  • @user2316116 如果我在 SSMS 中对其进行硬编码,它具有适当的值并且可以完美运行。
  • 不可能是真的,尝试调试/response.write ddlLocation.SelectedValue 或用测试值硬编码strSQL,看看sql会按预期更新数据库。我仍然认为 ddlLocation.SelectedValue 具有先前的值,因此当执行 sql 时,它会使用其先前的值更新 LocationID,因此您看不到任何区别。附:提示:写strSQL = @"..."的时候不用多写strSQL += ...
  • 好吧,我只能猜测您在那之后的某个地方覆盖了该值。如果相同的查询在 SSMS 中有效,则方案/查询应该是正确的,并且在应用程序中也应该有效。在您的屏幕截图中,当您停留在 close() 时,您是否看到 SSMS 发生了变化?
  • @user2316116 是的,你是对的。它正在被覆盖。我的 aspx 页面上有一个更新命令。

标签: c# asp.net sql-server-2008


【解决方案1】:

问题已找到。在检查数据库时遍历每个line of code 后,我发现数据库被Update Command 覆盖。 SQL 调用确实将数据库更改为正确的LocationID,但随后Update Command 在代码隐藏中调用其方法时将其更改回来。为了解决这个问题,Update Command 需要离开。不幸的是,我不得不留下Update Command 以保留错误消息。为了解决这个问题,我只是将Update Command 设为一个空白字符串。这是一个本可以避免的愚蠢错误,但我仍在学习 ASP.Net,因为我还是个初学者。在代码中使用空白Update Command 可能仍然不是一个好主意,但我还没有发现这是否会导致任何问题。

  <asp:SqlDataSource runat="server" ID="sdsListViewQuestion"
    ConnectionString="<%$ConnectionStrings:2020LJCDT %>"
    OldValuesParameterFormatString="original_{0}"
    InsertCommand="INSERT
                     INTO Question
                        (
                          LocationID,
                          Question
                        )
                   VALUES
                        (
                          @LocationID,
                          @Question
                        ) ;"
    UpdateCommand=";"
    DeleteCommand="DELETE
                     FROM Question
                    WHERE QuestionID = @original_QuestionID;">

</asp:SqlDataSource>

【讨论】:

    猜你喜欢
    • 2011-10-28
    • 2014-01-13
    • 1970-01-01
    • 2019-06-18
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    相关资源
    最近更新 更多