操作数数据类型通过VB.Net执行sp_help_job时发生冲突

时间:2015-06-01 22:29:10

标签: sql-server vb.net tsql

我可以通过以下TSQL轻松获取sql server agent作业信息:

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()

错误是&#34;操作数类型碰撞:int与uniqueidentifier&#34;不兼容。我不确定int的来源,我的代码不使用任何int数据类型,并且所有参数数据类型都与系统存储过程所期望的相匹配。

关于代码的一些注意事项:我正在使用OLEDB,因为我的连接字符串作为OLEDB连接传递给我。我也连接到MSDB数据库。

1 个答案:

答案 0 :(得分:1)

SqlDbType.UniqueIdentifier引用GUID(see here)。您可能需要重新格式化传递NULL值的方式。请参阅this link了解理由。

尝试在第6行使用DbNull.Value,所以它的内容如下:

p1 = New OleDb.OleDbParameter("@Job_id", SqlDbType.Int)
p1.Direction = ParameterDirection.Input
p1.Value = DbNull.Value
cmd.Parameters.Add