【发布时间】: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