2014-12-08 3 views
0

У меня есть запрос, который использует вспомогательный запрос с теми же параметрами, так что это выглядит примерно так:ADO Повторные SQL Параметры

strSelect = _ 
"SELECT a.State, a.FirstName, a.LastName, b.JobTitle " & _ 
"FROM apples a " & _ 
"LEFT JOIN (" & _ 
    "SELECT a.RecordNumber, " & _ 
    "CASE WHEN j.JobTitle IS NULL THEN j.JobTitle2 ELSE j.jobtitle END " & _ 
    "FROM apples a " & _ 
    "LEFT JOIN jobs j ON j.RecordNumber = a.RecordNumber " & _ 
    strWhere & _ 
    ") b ON b.RecordNumber = a.RecordNumber " 

strWhere = _ 
"WHERE a.JobState = ? " & _ 
"AND a.JobDate = ? " 

Суб-запрос в реальной жизни менее бессмысленно, чем один в пример.

Вопрос здесь, если я повторяю strWhere, то есть ли способ заставить параметры работать для итогового заявления strSQL = strSelect & strWhere? Проблема в том, что у меня есть два параметра, но они повторяются, поэтому для оператора strSQL было бы четыре параметра, но я бы предпочел не повторять свои параметры, когда я их объявляю.

У меня такое чувство, что мне не хватает чего-то довольно очевидного здесь. Какие-либо предложения?

+0

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

+0

У меня есть доступ только для чтения к этой базе данных. – JMcD

ответ

1

Вы должны использовать именованные параметры:

Попробуйте использовать именованные параметры, например:

WHERE a.JobState = @JobDate 

и

AND a.JobDate = @JobDate 

Затем, когда вы добавляете свои параметры, нужно будет только добавить их один раз. Это будет выглядеть примерно так:

SqlParameter param = new SqlParameter(); 
param.ParameterName = "JobDate"; 
param.Value   = theDate; 
+0

Я дам этот выстрел, спасибо. У меня создалось впечатление, что параметры были позиционными, даже если они названы, что существенно означает, что имена игнорируются. – JMcD

Смежные вопросы