Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.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#_Sql_Asp.net - Fatal编程技术网

C# 如何添加到Update语句中

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

我正在尝试更新数据库(表)并使活动列=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。因为这是一个软件,有无数的方法来解决你的问题。你可以轻松