Я пытаюсь заполнить выпадающий список из базы данных, но параметр (Div) имеет несколько значений. Я пытаюсь использовать цикл foreach, но он не работает. Действительно ли это возможно или есть другое решение для этого? Может быть, я должен положить его в таблицу и заселить из него? Поистине буду признателен за любые идеи и предложения.Population dropdownlist from database with multiparameter
вот мой код до сих пор:
//strDiv is generated from another table in database, has multiple value and
for each Div, it will have many product model
DCmdInquiry.CommandText = "Select SG.DivCode from Staff as ST, StaffGroup as SG " +
" where UserName = @UName and ST.SGroupID = SG.SGroupID";
SqlParameter UName = new SqlParameter("@UName", SqlDbType.VarChar);
UName.Value = strTmpName;
DCmdInquiry.Parameters.Add(UName);
DRInquiry = DCmdInquiry.ExecuteReader();
while (DRInquiry.Read())
{
strDiv = DRInquiry["DivCode"].ToString().Split(',');
}
ddlModelName.AppendDataBoundItems = true;
SqlConnection DbConn = new SqlConnection();
SqlCommand DCmdInquiry2 = new SqlCommand();
DbConn.ConnectionString = ConfigurationManager.ConnectionStrings["LDSTestConnectionString"].ConnectionString;
DCmdInquiry2.Connection = DbConn;
DbConn.Open();
DCmdInquiry2.CommandText = "Select ModelName from ProductModel where Div= @Div";
foreach (string x in strDiv)
{
SqlParameter Div = new SqlParameter("Div", SqlDbType.VarChar);
Div.Value = x;
DCmdInquiry2.Parameters.Add(Div);
ddlModelName.DataSource = DCmdInquiry2.ExecuteReader();
ddlModelName.DataTextField = "ModelName";
ddlModelName.DataValueField = "ModelName";
ddlModelName.DataBind();
}
Edit- Мой обновленный код, как предложил Тим Schmelter:
foreach (string x in strDiv)
{
Div.Value = x;
DCmdInquiry2.Parameters.Add(Div);
ddlModelName.Items.Add((string)DCmdInquiry2.ExecuteScalar());
DCmdInquiry2.Parameters.Clear();
}
ddlModelName.DataBind();
Спасибо.
Update:
После принятия во внимание мнения Джона P и делает много проб и ошибок, я пришел с этим SQL заявление:
select distinct PD.DivCode, PM.ModelName, ST.UserName from ProdDiv as PD
Join Staff as ST on PD.ProdGroup = ST.SGroupID
Join ProductModel as PM on PD.DivCode = PM.Div
where ST.Username = '@UName'
, который соединяет 3 таблицы, чтобы получить результат. Это работает, но я не уверен, что это лучший способ сделать это.
Я до сих пор не могу понять, как заполнить выпадающий список, используя многопараметрический параметр, который дает более одного результата. Способ работы Тима Шмельтера работает только в одной строке (потому что он использует ExecuteScalar), и мне нужно предоставить все доступные строки.
Поскольку у меня заканчивается время, я просто придерживаюсь вышеуказанного SQL. Возможно, это единственный «правильный» способ сделать это.
Какая ошибка/исключение вы получаете и в какой момент в вашем опубликованном коде? –
Вы привязываете коллекцию к 'dropdownlist' в цикле, который стирает предыдущие данные каждый раз, когда происходит привязка. –
@HarveySpecter это то, что я получил в ExecuteReader(): Имя переменной «@Div» уже объявлено. Имена переменных должны быть уникальными в рамках пакета запросов или хранимой процедуры. – nf91