Reputation: 534
I have a stored procedure spSchedulerCheck
that executes fine from SQL Server. It takes a single parameter, @jn
. Trying to run this from VB/ASP.Net throws me a syntax error (which I'm catching).
VB Code:
Public Function ScheduleCheck()
Dim sText As String
Using cn As New System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("ProductionDatabaseConnectionString1").ConnectionString)
cn.Open()
Dim cmd As New System.Data.SqlClient.SqlCommand("SchedulerCheck", cn)
cmd.Parameters.AddWithValue("@jn", Trim(Request.QueryString("jn").ToString()))
Try
Using reader As System.Data.SqlClient.SqlDataReader = cmd.ExecuteReader()
If reader.Read() Then
sText = reader(0).ToString()
End If
End Using
Catch ex As Exception
Return ex.Message
End Try
If Not cn Is Nothing Then
cn.Close()
End If
End Using
Return sText
End Function
SP:
USE [Production Database 2]
GO
/****** Object: StoredProcedure [dbo].[SchedulerCheck] Script Date: 12/11/2013 15:31:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[SchedulerCheck]
-- Add the parameters for the stored procedure here
@jn as nvarchar(max)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
declare @pn nvarchar(10);
set @pn = (select Proposalnumber from tblprj_management where jobnumber = @jn);
select ReturnCode = case
when not exists (select * from tblprj_equipmentscope where jobnumber = @jn)
then 'Could not find scope'
when not exists (select * from tblprj_frcriteria where jobnumber = @jn and 'FR' in (select equipment from tblprj_equipmentscope where jobnumber = @jn))
then 'Could not find FR Criteria entry'
when not exists (select * from tblprj_wccriteria where jobnumber = @jn and 'WC' in (select equipment from tblprj_equipmentscope where jobnumber = @jn))
then 'Could not find WC Criteria entry'
when not exists (select * from tblprj_sctcriteria where jobnumber = @jn and 'SCT' in (select equipment from tblprj_equipmentscope where jobnumber = @jn))
then 'Could not find SCT Criteria entry'
when not exists (select * from tblprj_accriteria where jobnumber = @jn and 'AC' in (select equipment from tblprj_equipmentscope where jobnumber = @jn))
then 'Could not find AC Criteria entry'
when not exists (select * from tblprj_LFcriteria where jobnumber = @jn and 'LF' in (select equipment from tblprj_equipmentscope where jobnumber = @jn))
then 'Could not find LF Criteria entry'
when not exists (select * from tblprj_laborest where proposalnumber = @pn)
and not exists (select * from tblprj_mfglaborest assy where proposalnumber = @pn)
then 'Could not find labor estimates'
else 'Success'
end
END
GO
Seems to me like this should return one of the messages in the SP, not error out. In fact, running it from the SQL server indeed runs as expected. Some troubleshooting also shows that it runs as expected when I don't provide a Parameter, and only freaks out when I try to pass one. What am I doing that's causing the error?
EDIT: Error is Syntax Error near SchedulerCheck
Upvotes: 0
Views: 191
Reputation: 43023
You need to set the CommandType
of you command to be StoredProcedure
. The default is Text
.
cmd.CommandType = CommandType.StoredProcedure
Upvotes: 2
Reputation: 216313
When you call a stored procedure you need to change the property CommandType from its default of Text
to StoredProcedure
Dim cmd As New System.Data.SqlClient.SqlCommand("SchedulerCheck", cn)
cmd.CommandType = CommandType.StoredProcedure
Otherwise the CommandText SchedulerCheck
is interpreted as a normal sql text
(like it was a SELECT/INSERT/UPDATE/DELETE
). Of course this result in a Syntax Error.
The AddWithValue has nothing to do with the error message
Upvotes: 2