C# 如何添加到Update语句中
我正在尝试更新数据库(表)并使活动列=1。 我有不同国家和参数的重复报告(主题文本)C# 如何添加到Update语句中,c#,sql,asp.net,C#,Sql,Asp.net,我正在尝试更新数据库(表)并使活动列=1。 我有不同国家和参数的重复报告(主题文本) subject_text countries parameter1 active usage GB 1 0 usage FR 2 0 usage PT 1 0 closed GB,FR,PT 1
subject_text countries parameter1 active
usage GB 1 0
usage FR 2 0
usage PT 1 0
closed GB,FR,PT 1 0
下面是我的数据库的一个示例(简化后,有更多的参数和更多的报告,但我希望您能理解我所说的重复报告名称的含义)
这是我的.cs文件,显示我正在尝试执行的更新。主题文本以下拉列表形式显示,因此用户可以选择要更新的报告。这些报告(主题文本)硬编码到我的ASPX页面。当选择诸如“closed”之类的报告时,更新会起作用,但当涉及到更新具有不同国家或参数的报告时,我遇到了问题
母版页母版
正在将此页链接到.getDropDownList值所在的位置
当下拉列表包含不同的元素时,如何将其添加到update语句中
protected void RunReport_Click (object sender, System.EventArgs e)
{
MasterPage master = (MasterPage)this.Master;
string sqlStatement = "";
sqlStatement = @"UPDATE [TODD].[dbo].[Table] SET Active='1' WHERE subject_text = @report";
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(sqlStatement, conn);
cmd = new SqlCommand(sqlStatement, conn);
cmd.Parameters.AddWithValue("@report", ddl_Report.SelectedItem.Text);
string getcountry = master.getDropDownListValue(ddl_country, false);
if (!string.IsNullOrWhiteSpace(getcountry))
{
cmd.Parameters.AddWithValue("@country", getcountry);
sqlStatement += "AND countries = @country";
}
string getparam1 = master.getDropDownListValue(Param1, false);
if (!string.IsNullOrWhiteSpace(getparam1))
{
cmd.Parameters.AddWithValue("@param1", getparam1);
sqlStatement += "AND parameter1 = @param1";
}
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
谢谢您抽出时间。请走开
SqlCommand cmd = new SqlCommand(sqlStatement, conn);
下面是字符串的最终计算sqlStatement
在基于sqlStatement
创建SqlCommand
之前,应先向sqlStatement
添加新文本
另外,您不需要调用newsqlcommand(sqlStatement,conn)编码>两次移动
SqlCommand cmd = new SqlCommand(sqlStatement, conn);
下面是字符串的最终计算sqlStatement
在基于sqlStatement
创建SqlCommand
之前,应先向sqlStatement
添加新文本
另外,您不需要调用newsqlcommand(sqlStatement,conn)代码>两次为什么不直接传递身份?这更干净
UPDATE [TODD].[dbo].[Table] SET Active='1' WHERE RecordID = @RecordId
你为什么不把身份传给我?这更干净
UPDATE [TODD].[dbo].[Table] SET Active='1' WHERE RecordID = @RecordId
目前的问题是什么?你有错误吗?不清楚你遇到了什么麻烦。你确定你从getDropDownListValue方法中得到了你所期望的结果吗?你的表有一列“country”,但是你的sql引用了“countries”@joe谢谢,这是我的输入错误mistake@AndyWiesendanger没有发生任何错误,这让我认为这与get下拉值有关,如果我拼错了,例如,我更新了没有错误,那么当前的问题是什么?你有错误吗?不清楚你遇到了什么麻烦。你确定你从getDropDownListValue方法中得到了你所期望的结果吗?你的表有一列“country”,但是你的sql引用了“countries”@joe谢谢,这是我的输入错误mistake@AndyWiesendanger没有发生任何错误,这让我认为这与get下拉值有关,如果我拼错了,例如,我更新了,当我移动时没有错误,cmd.parameters
变为红色,不能在声明之前使用?步骤1-执行所有逻辑来创建字符串sqlStatement。步骤2-基于该字符串创建SqlCommand对象。完成后,将忽略对sqlStatement字符串的任何其他更改。第3步-做你所有的逻辑来添加你的参数。。。如果您的表有一个由subject_text和country组成的复合键,那么无论您是否需要它们,您都应该在where子句中同时使用这两个键。不要使用逻辑有时添加它们,有时省略它们。。。您的复合密钥应始终完全使用。这将消除您的额外逻辑。非常感谢您的回答指导和时间,非常感谢。问题是,我有其他具有空值或重复国家的列,这些列由其他参数传递的内容选择。我可以像Moe建议的那样添加recordId吗?或者在另一列中添加数字或报告,这样当用户选择正确的报告时,它将从给定的数字中激活=1?如果愿意,您可以添加额外的ID列。需要知道的重要一点是,每个表都应该有一种唯一的方法来标识每一行。在某些情况下,这是一个包含主题、国家、参数的复合键。在其他情况下,它将是一个用户可能从未见过的幕后整数ID。因为这是一个软件,有无数的方法来解决你的问题。你可以简单地执行我在前面的评论中提到的三个步骤,只需一点剪切粘贴,或者你可以使用Moe的优秀建议。当我移动时,cmd.parameters
变为红色,不能在声明之前使用?步骤1-执行所有逻辑来创建字符串sqlStatement。步骤2-基于该字符串创建SqlCommand对象。完成后,将忽略对sqlStatement字符串的任何其他更改。第3步-做你所有的逻辑来添加你的参数。。。如果您的表有一个由subject_text和country组成的复合键,那么无论您是否需要它们,您都应该在where子句中同时使用这两个键。不要使用逻辑有时添加它们,有时省略它们。。。您的复合密钥应始终完全使用。这将消除您的额外逻辑。非常感谢您的回答指导和时间,非常感谢。问题是,我有其他具有空值或重复国家的列,这些列由其他参数传递的内容选择。我可以像Moe建议的那样添加recordId吗?或者在另一列中添加数字或报告,这样当用户选择正确的报告时,它将从给定的数字中激活=1?如果愿意,您可以添加额外的ID列。需要知道的重要一点是,每个表都应该有一种唯一的方法来标识每一行。在某些情况下,这是一个包含主题、国家、参数的复合键。在其他情况下,它将是一个用户可能从未见过的幕后整数ID。因为这是一个软件,有无数的方法来解决你的问题。你可以轻松