2015-10-21 4 views
0

Я пытаюсь обновить мою базу данных (Таблица) и сделать активный столбец = 1. У меня есть повторяющиеся отчеты (subject_text) с разными странами и параметрами.Как добавить к заявлению об обновлении

subject_text countries parameter1 active 
usage   GB   1   0 
usage   FR   2   0 
usage   PT   1   0 
closed  GB,FR,PT  1   0 

Вот пример того, что моя база данных выглядит (упрощенный, есть много параметров, и многие другие отчеты, но я надеюсь, что вы можете увидеть, что я имею в виду повторяющихся имен отчетов)

Вот мой .cs, чтобы показать обновление, которое я пытаюсь выполнить. Subject_text находится в раскрывающемся списке, поэтому пользователь может выбрать, какой отчет обновить. Эти отчеты (subject_text) жестко закодированы на моей странице ASPX. При выборе отчета, такого как «закрыто», обновление работает, но когда дело доходит до обновления отчетов, которые имеют разные страны или параметры, где у меня возникают проблемы.

Masterpage master связывает эту страницу с которой .getDropDownListValue является

Как я могу добавить к моему заявлению обновления, когда выпадающие списки содержат различные элементы?

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

Благодарим вас за внимание.

+0

В чем проблема? Вы получаете ошибки? Непонятно, какие проблемы у вас есть. Вы уверены, что возвращаете то, что ожидаете от метода getDropDownListValue? –

+3

ваш стол имеет столбец «страна», но ваш sql ссылается на «страны» – Joe

+0

@joe спасибо, это была опечатка моя ошибка –

ответ

3

движение

SqlCommand cmd = new SqlCommand(sqlStatement, conn); 

ниже окончательного расчета вашей строки sqlStatement

добавляя новый текст sqlStatement должно быть сделано, прежде чем создать свой SqlCommand на основе sqlStatement

также, вы не необходимо позвонить по телефону new SqlCommand(sqlStatement, conn); дважды

+0

, когда я перехожу, 'cmd.parameters' go red, нельзя использовать перед объявлением? –

+0

Шаг 1 - выполните всю свою логику, чтобы создать строку sqlStatement. Шаг 2 - создайте объект SqlCommand на основе этой строки. Как только это будет сделано, любые дополнительные изменения в строке sqlStatement будут проигнорированы. Шаг 3 - сделайте всю свою логику, чтобы добавить свои параметры. – Joe

+0

, подумав об этом далее ... если в вашей таблице есть составной ключ subject_text и стран, тогда вы всегда должны использовать оба из них в своем предложении where, независимо от того, нужны они вам или нет. Не используйте логику, чтобы иногда добавлять их, а иногда и опускать их ... ваш составной ключ всегда должен использоваться в полном объеме. Это устранит вашу дополнительную логику. – Joe

1

Почему бы вам не сделать Jus t передать личность? Это намного чище.

UPDATE [TODD].[dbo].[Table] SET Active='1' WHERE RecordID = @RecordId 
+0

Я предпочитаю ваш метод по собственному ответу, но ОП не упомянул, что у него был RecordId. – Joe

+0

Это было всего лишь предложение для более чистого кода. Нет вопросов, у вас есть правильный ответ. – Moe