2011-02-06 2 views
0

У меня есть выпадающий список с именами менеджеров проектов и checkboxlist с именами членов команды. То, что я хочу сделать, это записать идентификаторы выбранных из раскрывающегося списка и checkboxlist в базу данных. Я использую следующий код, но только идентификаторы из checkboxlist хранятся в таблице. Что я могу сделать, чтобы одновременно сохранить идентификатор из выпадающего списка? Спасибо за вашу помощь.Проблема с записью идентификаторов в DB

for (int i = 0; i < project_members.Items.Count; i++) 
{ 

      if (project_members.Items[i].Selected) 
      { 


       SqlParameter[] param = new SqlParameter[1]; 
       param[0] = new SqlParameter("@member_id", SqlDbType.Int); 
       param[0].Value = project_manager.SelectedValue; 
       param[0].Value = project_members.Items[i].Value; 


       for (int j = 0; j < param.Length; j++) 
       { 
        cmd2.Parameters.Add(param[j]); 
       } 

       cmd2.CommandType = CommandType.Text; 
       cmd2.ExecuteNonQuery(); 
       cmd2.Parameters.Clear(); 

      } 
} 
+0

Почему вы устанавливаете 'param [0] .Value' дважды? Значение 'project_manager.SelectedValue' в основном проигнорировано ... – hangy

+0

есть от одного до большого отношения между менеджером проекта и членами команды .. можете ли вы показать нам структуру базы данных –

+0

Да, есть отношения от одного до многих - это почему я использую раскрывающийся список для выбора менеджера проекта и checkboxlist для выбора членов команды. – MiziaQ

ответ

0

Вы не должны создавать новые параметры каждой итерации цикла.

SqlParameter managerParameter = new SqlParameter("@manager_id", SqlDbType.Int); 
cmd2.Parameters.Add(managerParameter); 
managerParameter.Value = project_manager.SelectedValue; 

SqlParameter memberParameter = new SqlParameter("@member_id", SqlDbType.Int); 
cmd2.Parameters.Add(memberParameter); 

cmd2.CommandType = CommandType.Text; 

// For better performance in the loop, you could prepare the query: 
cmd2.Prepare(); 
for (int i = 0; i < project_members.Items.Count; ++i) 
{ 
    if (project_members.Items[i].Selected) 
    { 
     memberParameter = project_members.Items[i].Value; 
     cmd2.ExecuteNonQuery(); 
    } 
} 

Обратите внимание, что я предположил, что выбранный mananger играл другую роль, чем «обычные» члены. Если менеджер должен быть обработан как любой член, попробуйте следующее:

SqlParameter memberParameter = new SqlParameter("@member_id", SqlDbType.Int); 
cmd2.Parameters.Add(memberParameter); 

cmd2.CommandType = CommandType.Text; 

// For better performance in the loop, you could prepare the query: 
cmd2.Prepare(); 

memberParameter.Value = project_manager.SelectedValue; 
cmd2.ExecuteNonQuery(); 

for (int i = 0; i < project_members.Items.Count; ++i) 
{ 
    if (project_members.Items[i].Selected) 
    { 
     memberParameter = project_members.Items[i].Value; 
     cmd2.ExecuteNonQuery(); 
    } 
} 
+0

Спасибо, это оно! – MiziaQ

1

Проблема, кажется, с этими линиями:

param[0] = new SqlParameter("@member_id", SqlDbType.Int); 
param[0].Value = project_manager.SelectedValue; 
param[0].Value = project_members.Items[i].Value; 

вы назначая param[0] с project_manager.SelectedValue;, то вы перезаписью с project_members.Items[i].Value;

+0

Спасибо, я использую param [0] дважды, потому что я хочу записать значения в одно и то же поле в таблице. Как я могу это изменить? – MiziaQ

+0

, тогда вы должны сделать '+ =' вместо = .Or лучше, чем этот 'param [0] = project_manager.SelectedValue.Tostring() + project_members.Items [i] .Value.ToString();' –