2015-06-01 2 views
0

Я могу легко получить информацию о заданиях агента SQL сервера с помощью следующей TSQL:Операнд Тип данных Clash при выполнении sp_help_job с помощью VB.Net

sp_help_job @job_id=null, @job_name='<My Job Name>',@job_aspect='JOB' 

Однако, когда я пытаюсь выполнить эту систему хранимой процедуру в vb.net я получаю сообщение об ошибке коллизий типа данных:

cmd = New OleDb.OleDbCommand("sp_help_job", jobConnection) 
cmd.CommandType = CommandType.StoredProcedure 
''job id value should be set to null - we will filter on the job name... 
p1 = New OleDb.OleDbParameter("@Job_id", SqlDbType.UniqueIdentifier) 
p1.Direction = ParameterDirection.Input 
p1.Value = vbNull 
cmd.Parameters.Add(p1) 
''job name paramter is the currently running interface, strCurrentPackage... 
p2 = New OleDb.OleDbParameter("@job_name", SqlDbType.NVarChar) 
p2.Direction = ParameterDirection.Input 
p2.Value = strCurrentPackage 
cmd.Parameters.Add(p2) 
''job aspect value = "JOB" to get only the job info result set... 
p3 = New OleDb.OleDbParameter("@job_aspect", SqlDbType.NVarChar) 
p3.Direction = ParameterDirection.Input 
p3.Value = "JOB" 
cmd.Parameters.Add(p3) 
jobReader = cmd.ExecuteReader() 

ошибка «тип Операнд столкновение: INT несовместима с UniqueIdentifier». Я не уверен, откуда int, мой код не использует какие-либо типы данных int, а все типы данных параметров соответствуют ожидаемой системной хранимой процедуре.

Пара примечаний по коду: Я использую OLEDB, потому что моя строка соединения передается мне как соединение OLEDB. Я также подключаюсь к базе данных MSDB.

+0

Это может быть связано с тем, что в настоящее время JobID разобранного как 'int' типа данных, и вы его определяется как' UniqueIdentifier 'в строке 4. Попробуйте изменить' SqlDbType.UniqueIdentifier' на 'SqlDbType.Int' – Phoenix

+0

На основе документации это должен быть уникальный идентификатор: https://msdn.microsoft.com/en-us/library/ms186722.aspx , Я попытался установить строку 4 на тип данных int, но это не работает; Я получаю ту же ошибку. – bsivel

+0

Вы правы, это должен быть уникальный идентификатор. Интересно, связано ли это с тем, как вы передаете значение. Я буду продолжать исследования. – Phoenix

ответ

1

SqlDbType.UniqueIdentifier ссылки GUID (see here). Возможно, вам придется переформатировать, как вы передаете свое значение NULL. См. this link для обоснования.

Попробуйте использовать DbNull.Value в строке 6, поэтому он звучит так:

p1 = New OleDb.OleDbParameter("@Job_id", SqlDbType.Int) 
p1.Direction = ParameterDirection.Input 
p1.Value = DbNull.Value 
cmd.Parameters.Add 
Смежные вопросы