2015-05-05 3 views
0

У меня есть два CheckedListBoxes, стандартные коды и стандартные сведения. После инициализации стандартные коды заполняются из запроса в базу данных.Использование значений CheckedListBox в SQL Select Statement

 InitializeComponent(); 
     SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=Project;Integrated Security=True"); 
     conn.Open(); 
     DataSet ds = new DataSet(); 
     SqlDataAdapter adapter = new SqlDataAdapter    
     ("SELECT [StandardCode] FROM [dbo].[StandardCodesAndDetails]", conn); 
     adapter.Fill(ds); 
     this.lstBoxStandardCodes.DataSource = ds.Tables[0]; 
     this.lstBoxStandardCodes.DisplayMember = "StandardCode"; 
     conn.Close(); 

Из этого CheckedListBox пользователь может выбрать несколько значений стандартного кода. Поскольку эти значения отмечены или не отмечены, я хочу запустить запрос, который заполнит стандартную информацию CheckedListBox с соответствующими стандартными данными из базы данных, а некоторые стандартные коды имеют более чем одну стандартную деталь. Это та часть, которую я не знаю, как писать. Я не уверен, как включить проверенные значения CheckedListBox в SQL-запрос вроде этого.

Любая помощь вообще будет оценена по достоинству. Спасибо.

+0

Одним из решений может быть, если вы напишете 'store proc', который принимает значения, разделенные запятой, вместо вызовов' dynamic sql'. Затем вы можете просто передать несколько значений либо с помощью 'for loops', либо' foreach'. – smr5

ответ

0

Вы должны создать свою инструкцию sql динамически, а не жестко ее кодировать. Например, я напишу метод, который представляет собой инструкцию sql на основе пользовательского ввода, подобного этому.

public string CreateSQL(string userName,string password) 
{ 
    string sql="SELECT * FROM Table WHERE"; 

    if(!string.IsNullOrWhiteSpace(userName) && !string.IsNullOrWhiteSpace(password)) 
{ 
    sql+=" UserName='"+userName+"' AND Password='"+password+"'"; 
} 
else if(!string.IsNullOrWhiteSpace(userName)) 
{ 
    sql+=" UserName='"+userName+"'"; 
} 
else if(!string.IsNullOrWhiteSpace(password)) 
{ 
    sql+=" Password='"+password+"'"; 
} 
else 
{ 
sql=null; 
} 

return sql; 
} 
+0

Если все условия являются ложными, то 'sql' является" SELECT * FROM Table WHERE ", который является недопустимым. Также всегда следует использовать параметры, чтобы избежать внедрения sql. – juharr

+0

Приведенный выше код можно использовать только в качестве примера того, как вы можете динамически создавать sql. Лучший способ - использовать параметры и хранить proc.Also посмотреть [здесь] (http://stackoverflow.com/questions/306668/are- параметры-очень-достаточно к предотвращать-SQL-инъекций) –