Too many args when running a stored procedure

  • Thread starter Thread starter M K
  • Start date Start date
M

M K

Heres my SP: ( i am trying to add more than 1 field but get the same error
no matter how many i try to add, i thought i would try to insert the primary
key only and work up from there but the primary key insert didnt work
either. I can run the SP manually in Visual Studio .NET and it works. When
i try to do this it doesn't.

Any help is greatly appreciated... newbie here as well so please be gentle
:)

ALTER PROCEDURE dbo.AddJob
@JobNumber varchar(30)
AS
INSERT INTO [Jobs].[dbo].[Job]
(JobRefNum)
VALUES
(@JobNumber)


Code:
SqlCommand1.CommandType = CommandType.StoredProcedure
SqlCommand1.CommandText = "Jobs.dbo.AddJob"
SqlCommand1.Parameters.Add("@JobNumber", txtJobRefNumber.Text)
SqlCommand1.ExecuteNonQuery()
 
M said:
Heres my SP: ( i am trying to add more than 1 field but get the same error
no matter how many i try to add, i thought i would try to insert the primary
key only and work up from there but the primary key insert didnt work
either. I can run the SP manually in Visual Studio .NET and it works. When
i try to do this it doesn't.

Any help is greatly appreciated... newbie here as well so please be gentle
:)

ALTER PROCEDURE dbo.AddJob
@JobNumber varchar(30)
AS
INSERT INTO [Jobs].[dbo].[Job]
(JobRefNum)
VALUES
(@JobNumber)


Code:
SqlCommand1.CommandType = CommandType.StoredProcedure
SqlCommand1.CommandText = "Jobs.dbo.AddJob"
SqlCommand1.Parameters.Add("@JobNumber", txtJobRefNumber.Text)
SqlCommand1.ExecuteNonQuery()

ALTER PROCEDURE dbo.AddJob
(
@JobNumber varchar(30)
)
AS
INSERT INTO [Jobs].[dbo].[Job]
(JobRefNum)
VALUES
(@JobNumber)
 
Same problem
I copied your code and commented out everything else..

Mark

Chris said:
M said:
Heres my SP: ( i am trying to add more than 1 field but get the same
error no matter how many i try to add, i thought i would try to insert
the primary key only and work up from there but the primary key insert
didnt work either. I can run the SP manually in Visual Studio .NET and
it works. When i try to do this it doesn't.

Any help is greatly appreciated... newbie here as well so please be
gentle :)

ALTER PROCEDURE dbo.AddJob
@JobNumber varchar(30)
AS
INSERT INTO [Jobs].[dbo].[Job]
(JobRefNum)
VALUES
(@JobNumber)


Code:
SqlCommand1.CommandType = CommandType.StoredProcedure
SqlCommand1.CommandText = "Jobs.dbo.AddJob"
SqlCommand1.Parameters.Add("@JobNumber", txtJobRefNumber.Text)
SqlCommand1.ExecuteNonQuery()

ALTER PROCEDURE dbo.AddJob
(
@JobNumber varchar(30)
)
AS
INSERT INTO [Jobs].[dbo].[Job]
(JobRefNum)
VALUES
(@JobNumber)
 
What's the exact error message text you're receiving? Can we assume that
the SP is in the Jobs database as well? A lot of possible problems come to
mind, but without the exact code and DDL it's all guesswork.
 
System.Data.SqlClient.SqlException: Procedure or function AddJob has too
many arguments specified at
..
..(partially omitted)
..
ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean
returnStream)
..
..(partially omitted)
..
at JobBank.frmJobDetails.SaveToDb(String type) in D:. . .\JobDetails.vb:line
417


Michael C# said:
What's the exact error message text you're receiving? Can we assume that
the SP is in the Jobs database as well? A lot of possible problems come
to mind, but without the exact code and DDL it's all guesswork.

M K said:
Heres my SP: ( i am trying to add more than 1 field but get the same
error no matter how many i try to add, i thought i would try to insert
the primary key only and work up from there but the primary key insert
didnt work either. I can run the SP manually in Visual Studio .NET and
it works. When i try to do this it doesn't.

Any help is greatly appreciated... newbie here as well so please be
gentle :)

ALTER PROCEDURE dbo.AddJob
@JobNumber varchar(30)
AS
INSERT INTO [Jobs].[dbo].[Job]
(JobRefNum)
VALUES
(@JobNumber)


Code:
SqlCommand1.CommandType = CommandType.StoredProcedure
SqlCommand1.CommandText = "Jobs.dbo.AddJob"
SqlCommand1.Parameters.Add("@JobNumber", txtJobRefNumber.Text)
SqlCommand1.ExecuteNonQuery()
 
Yes SP is in the jobs db. it does run when i execute the SP from server
explorer

Michael C# said:
What's the exact error message text you're receiving? Can we assume that
the SP is in the Jobs database as well? A lot of possible problems come
to mind, but without the exact code and DDL it's all guesswork.

M K said:
Heres my SP: ( i am trying to add more than 1 field but get the same
error no matter how many i try to add, i thought i would try to insert
the primary key only and work up from there but the primary key insert
didnt work either. I can run the SP manually in Visual Studio .NET and
it works. When i try to do this it doesn't.

Any help is greatly appreciated... newbie here as well so please be
gentle :)

ALTER PROCEDURE dbo.AddJob
@JobNumber varchar(30)
AS
INSERT INTO [Jobs].[dbo].[Job]
(JobRefNum)
VALUES
(@JobNumber)


Code:
SqlCommand1.CommandType = CommandType.StoredProcedure
SqlCommand1.CommandText = "Jobs.dbo.AddJob"
SqlCommand1.Parameters.Add("@JobNumber", txtJobRefNumber.Text)
SqlCommand1.ExecuteNonQuery()
 
MK,

Are you maybe adding the parameter to the parameterlist more times, this is
not unlikely because normally we would have seen an instrucktion as

\\\
SqlCommand1.Parameters("@JobNumber").value = xtJobRefNumber.Text
SqlCommand1.ExecuteNonQuery()
///
I hope this helps,

Cor
 
I tried your code as well and got the same error. The code i used i took
straight from the book and just put in my values instead.
Read my post from 9/15 10:11 as it has the exact error
 
I would not expect it to make a difference. However, I don't have VB.Net on
the machine I am at now, so I can't try it (I won't have access to my dev
machine until Monday).

Have you tried to declare your object as I have shown? Does it work? Can
you show how you have declared the Connection and Command Objects?

M K said:
Yup I've tried that too.. lol.. man this is frustrating.. You use the OLE
object where I am trying to use the SQL object. Would that be the problem?
If i cant figure this out im going to make them inline vs stored
procedure.. ugggg

Al Reid said:
MK,

Perhaps you have a duplicate definition of "AddAJob" in the master
database schema. I noticed that you were not specifying the
schema.owner.spname in the .CommandText. Try

SqlCommand1.CommandText = "Jobs.dbo.AddAJob"

and see if you get the expected results. As I stated, I replicated your
schema and SP in my system and had it working using the
code I posted.

--
Al Reid


M K said:
Al thanks for the great information. I have the SQLCommand And
SQLConnection objects due to the fact when i created the SP i dragged it
to
the form which created both objects for me

I thought there was a Null object but when i put in Null it didnt work
thanks for correcting my use of DBNull

I have tried the @MyDate parm this way as well and still get the same
error.
I have tried so many things i cant remember what i have tried or not but
it
always results in the same error. I even tried just inserting just the
primary key and still the same error, ive even put the parameters in
code in
the same order as below.
ALTER PROCEDURE dbo.AddAJob

(

@JobName varchar(50),

@JobNumber varchar(30),

@Contact varchar(40),

@Phone char(10),

@Fax char(10),

--@MyDate datetime = GetDate,

@Location varchar(40),

@Skills text,

@Agency varchar(40),

@CloseDate datetime,

@Rate money

)

AS

INSERT INTO [Jobs].[dbo].[Job]

(JobName, JobRefNum, Contact, Phone, Fax, DateApplied, JobLocation,
Skills,
Agency, CloseDate, Rate)

VALUES

(@JobName, @JobNumber, @Contact, @Phone, @Fax, GetDate(), @Location,
@Skills, @Agency, @CloseDate, @Rate)

RETURN





Ok, let me take a shot at this. To start with, I created your
database
structure and SP in MSSQL.

First, you don't show that you are associating the connection object
with
the command. Have you done that? Secondly, your
procedure has 11 parameters and your code has 10, the "@MyDate" is
missing. If you aren't going to use the parameter, remove it
from the SP parameters and replace the "@MyDate" with GetDate in the
Values() line.

In order to get your code to work I had to create a connection object
and
connection string before opening it. I had too create a
new connection object. After opening the connection, I had to
associate
it with the command object. After that, I had to add a
Parameter object for the @MyDate parameter. Furthermore, I had to
convert
the date and money value (*.Text) to the appropriate data
types. Having done that, I was able to insert data into the table
with
the following code:

/////////////////
Public Sub TestIt()

Dim SqlConnection1 As OleDb.OleDbConnection
Dim SqlCommand1 As New OleDb.OleDbCommand

Try
SqlConnection1 = Connect("sa", "gobblygoop",
dbtDatabase.dbtSqlServer, , "(local)")
' Connect is a general purpose function for connecting to
various
database types
' MsAbbess, MSSQL, Oracle, CSV, Excel, ...


SqlCommand1.CommandType = CommandType.StoredProcedure

SqlCommand1.CommandText = "Jobs.dbo.AddAJob"

SqlCommand1.Connection = SqlConnection1 '<< Added this line

SqlCommand1.Parameters.Add("@JobName", "Test Job")

SqlCommand1.Parameters.Add("@JobNumber", "123456")

SqlCommand1.Parameters.Add("@Contact", "Al Reid")

SqlCommand1.Parameters.Add("@Phone", "4242502116")

SqlCommand1.Parameters.Add("@Fax", "4022572410")

SqlCommand1.Parameters.Add("@MyDate", CDate("09/17/2005"))
'<<<
Added this line

SqlCommand1.Parameters.Add("@Location", "Here")

SqlCommand1.Parameters.Add("@Skills", "DotNet")

SqlCommand1.Parameters.Add("@Agency", "TechMe Corp")

'optional fields

SqlCommand1.Parameters.Add("@CloseDate", CDate("09/17/2005"))
'<<
Converted to a date type

SqlCommand1.Parameters.Add("@Rate", CType("65.50", Decimal))
'<<
Converted to a numeric type

SqlCommand1.ExecuteNonQuery()

Catch ex As Exception

MsgBox("Could not add record" & Chr(10) & ex.ToString())

Finally

SqlConnection1.Close()

End Try

End Sub
\\\\\\\\\\\\\\\\\\\\

Also, I question the code that checks if a TextBox.Text is an empty
string:

If txtFax.Text <> "" Then
SqlCommand1.Parameters.Add("@Fax", txtFax.Text)
Else
SqlCommand1.Parameters.Add("@Fax", "")
End If

This results in the same parameter data being sent to the SP as

SqlCommand1.Parameters.Add("@Fax", txtFax.Text)

Did you mean to substitute DbNull.Value for the "" in the else clause?

In any event, I was able to get your SL and modified code to function
properly and never got an error indicating "Too many
arguments."


I hope this helps.

--
Al Reid

Did you see my first post?
I just tried creating a new SP within Visual Studio and I get the
same
thing
Here is all the code that I am trying to run. It does work fine if i
run
the SP in Server Explorer and it updates
the table just fine.

SP:
ALTER PROCEDURE dbo.AddAJob

(

@JobName varchar(50),

@JobNumber varchar(30),

@Contact varchar(40),

@Phone char(10),

@Fax char(10),

@MyDate datetime = GetDate,

@Location varchar(40),

@Skills text,

@Agency varchar(40),

@CloseDate datetime,

@Rate money

)

AS

INSERT INTO [Jobs].[dbo].[Job]

(JobName, JobRefNum, Contact, Phone, Fax, DateApplied, JobLocation,
Skills,
Agency, CloseDate, Rate)

VALUES

(@JobName, @JobNumber, @Contact, @Phone, @Fax, @MyDate, @Location,
@Skills,
@Agency, @CloseDate, @Rate)

RETURN


Code:

Try
SqlConnection1.Open()

'mandatory fields

SqlCommand1.CommandType = CommandType.StoredProcedure

SqlCommand1.CommandText = "AddAJob"

SqlCommand1.Parameters.Add("@JobName", txtJobName.Text)

SqlCommand1.Parameters.Add("@JobNumber", txtJobRefNumber.Text)

SqlCommand1.Parameters.Add("@Contact", txtContact.Text)

SqlCommand1.Parameters.Add("@Phone", txtPhone.Text)

If txtFax.Text <> "" Then

SqlCommand1.Parameters.Add("@Fax", txtFax.Text)

Else

SqlCommand1.Parameters.Add("@Fax", "")

End If

SqlCommand1.Parameters.Add("@Location", txtLocation.Text)

SqlCommand1.Parameters.Add("@Skills", txtSkills.Text)

SqlCommand1.Parameters.Add("@Agency", txtAgency.Text)

'optional fields

If calCloseDate.Text <> "" Then

SqlCommand1.Parameters.Add("@CloseDate", Format(calCloseDate.Text,
"General
Date"))

Else

SqlCommand1.Parameters.Add("@CloseDate", "")

End If

If txtRate.Text <> "" Then

SqlCommand1.Parameters.Add("@Rate", Format(txtRate.Text, "Currency"))

Else

SqlCommand1.Parameters.Add("@Rate", "")

End If

SqlCommand1.ExecuteNonQuery()

Catch ex As Exception

MsgBox("Could not add record" & Chr(10) & ex.ToString())

Exit Function

Finally

SqlConnection1.Close()

End Try


MK,

Are you maybe adding the parameter to the parameterlist more times,
this
is not unlikely because normally we would have seen an instrucktion
as

\\\
SqlCommand1.Parameters("@JobNumber").value = xtJobRefNumber.Text
SqlCommand1.ExecuteNonQuery()
///
I hope this helps,

Cor
 
i guess theres something about SQLConnection that was messing me up.. heres
what now works.. need to tweek it but at least i got the insert to work..
Thanks a bunch Al!

I created the connection using the data object.. keeps from having to type
in the connection string .. it does it for you..

Again.. thanks!
Mark
Dim SqlCommand2 As New OleDb.OleDbCommand

Try

OleDbConnection1.Open()

SqlCommand2.CommandType = CommandType.StoredProcedure

SqlCommand2.CommandText = "Jobs.dbo.AddAJob"

SqlCommand2.Connection = OleDbConnection1 '<< Added this line

SqlCommand2.Parameters.Add("@JobName", "Test Job")

SqlCommand2.Parameters.Add("@JobNumber", "123456")

SqlCommand2.Parameters.Add("@Contact", "Al Reid")

SqlCommand2.Parameters.Add("@Phone", "4242502116")

SqlCommand2.Parameters.Add("@Fax", "4022572410")

SqlCommand2.Parameters.Add("@Location", "Here")

SqlCommand2.Parameters.Add("@Skills", "DotNet")

SqlCommand2.Parameters.Add("@Agency", "TechMe Corp")

'optional fields

SqlCommand2.Parameters.Add("@CloseDate", CDate("09/17/2005")) '<< Converted
to a date type

SqlCommand2.Parameters.Add("@Rate", CType("65.50", Decimal)) '<< Converted
to a numeric type

SqlCommand2.Parameters.Add("@Email", "myemail")

SqlCommand2.ExecuteNonQuery()

Catch ex As Exception

MsgBox("Could not add record" & Chr(10) & ex.ToString())

Finally

OleDbConnection1.Close()

End Try

End Sub




Al Reid said:
MK,

Perhaps you have a duplicate definition of "AddAJob" in the master
database schema. I noticed that you were not specifying the
schema.owner.spname in the .CommandText. Try

SqlCommand1.CommandText = "Jobs.dbo.AddAJob"

and see if you get the expected results. As I stated, I replicated your
schema and SP in my system and had it working using the
code I posted.

--
Al Reid


M K said:
Al thanks for the great information. I have the SQLCommand And
SQLConnection objects due to the fact when i created the SP i dragged it
to
the form which created both objects for me

I thought there was a Null object but when i put in Null it didnt work
thanks for correcting my use of DBNull

I have tried the @MyDate parm this way as well and still get the same
error.
I have tried so many things i cant remember what i have tried or not but
it
always results in the same error. I even tried just inserting just the
primary key and still the same error, ive even put the parameters in code
in
the same order as below.
ALTER PROCEDURE dbo.AddAJob

(

@JobName varchar(50),

@JobNumber varchar(30),

@Contact varchar(40),

@Phone char(10),

@Fax char(10),

--@MyDate datetime = GetDate,

@Location varchar(40),

@Skills text,

@Agency varchar(40),

@CloseDate datetime,

@Rate money

)

AS

INSERT INTO [Jobs].[dbo].[Job]

(JobName, JobRefNum, Contact, Phone, Fax, DateApplied, JobLocation,
Skills,
Agency, CloseDate, Rate)

VALUES

(@JobName, @JobNumber, @Contact, @Phone, @Fax, GetDate(), @Location,
@Skills, @Agency, @CloseDate, @Rate)

RETURN





Al Reid said:
Ok, let me take a shot at this. To start with, I created your database
structure and SP in MSSQL.

First, you don't show that you are associating the connection object
with
the command. Have you done that? Secondly, your
procedure has 11 parameters and your code has 10, the "@MyDate" is
missing. If you aren't going to use the parameter, remove it
from the SP parameters and replace the "@MyDate" with GetDate in the
Values() line.

In order to get your code to work I had to create a connection object
and
connection string before opening it. I had too create a
new connection object. After opening the connection, I had to
associate
it with the command object. After that, I had to add a
Parameter object for the @MyDate parameter. Furthermore, I had to
convert
the date and money value (*.Text) to the appropriate data
types. Having done that, I was able to insert data into the table with
the following code:

/////////////////
Public Sub TestIt()

Dim SqlConnection1 As OleDb.OleDbConnection
Dim SqlCommand1 As New OleDb.OleDbCommand

Try
SqlConnection1 = Connect("sa", "gobblygoop",
dbtDatabase.dbtSqlServer, , "(local)")
' Connect is a general purpose function for connecting to
various
database types
' MsAbbess, MSSQL, Oracle, CSV, Excel, ...


SqlCommand1.CommandType = CommandType.StoredProcedure

SqlCommand1.CommandText = "Jobs.dbo.AddAJob"

SqlCommand1.Connection = SqlConnection1 '<< Added this line

SqlCommand1.Parameters.Add("@JobName", "Test Job")

SqlCommand1.Parameters.Add("@JobNumber", "123456")

SqlCommand1.Parameters.Add("@Contact", "Al Reid")

SqlCommand1.Parameters.Add("@Phone", "4242502116")

SqlCommand1.Parameters.Add("@Fax", "4022572410")

SqlCommand1.Parameters.Add("@MyDate", CDate("09/17/2005")) '<<<
Added this line

SqlCommand1.Parameters.Add("@Location", "Here")

SqlCommand1.Parameters.Add("@Skills", "DotNet")

SqlCommand1.Parameters.Add("@Agency", "TechMe Corp")

'optional fields

SqlCommand1.Parameters.Add("@CloseDate", CDate("09/17/2005"))
'<<
Converted to a date type

SqlCommand1.Parameters.Add("@Rate", CType("65.50", Decimal))
'<<
Converted to a numeric type

SqlCommand1.ExecuteNonQuery()

Catch ex As Exception

MsgBox("Could not add record" & Chr(10) & ex.ToString())

Finally

SqlConnection1.Close()

End Try

End Sub
\\\\\\\\\\\\\\\\\\\\

Also, I question the code that checks if a TextBox.Text is an empty
string:

If txtFax.Text <> "" Then
SqlCommand1.Parameters.Add("@Fax", txtFax.Text)
Else
SqlCommand1.Parameters.Add("@Fax", "")
End If

This results in the same parameter data being sent to the SP as

SqlCommand1.Parameters.Add("@Fax", txtFax.Text)

Did you mean to substitute DbNull.Value for the "" in the else clause?

In any event, I was able to get your SL and modified code to function
properly and never got an error indicating "Too many
arguments."


I hope this helps.

--
Al Reid

Did you see my first post?
I just tried creating a new SP within Visual Studio and I get the same
thing
Here is all the code that I am trying to run. It does work fine if i
run
the SP in Server Explorer and it updates
the table just fine.

SP:
ALTER PROCEDURE dbo.AddAJob

(

@JobName varchar(50),

@JobNumber varchar(30),

@Contact varchar(40),

@Phone char(10),

@Fax char(10),

@MyDate datetime = GetDate,

@Location varchar(40),

@Skills text,

@Agency varchar(40),

@CloseDate datetime,

@Rate money

)

AS

INSERT INTO [Jobs].[dbo].[Job]

(JobName, JobRefNum, Contact, Phone, Fax, DateApplied, JobLocation,
Skills,
Agency, CloseDate, Rate)

VALUES

(@JobName, @JobNumber, @Contact, @Phone, @Fax, @MyDate, @Location,
@Skills,
@Agency, @CloseDate, @Rate)

RETURN


Code:

Try
SqlConnection1.Open()

'mandatory fields

SqlCommand1.CommandType = CommandType.StoredProcedure

SqlCommand1.CommandText = "AddAJob"

SqlCommand1.Parameters.Add("@JobName", txtJobName.Text)

SqlCommand1.Parameters.Add("@JobNumber", txtJobRefNumber.Text)

SqlCommand1.Parameters.Add("@Contact", txtContact.Text)

SqlCommand1.Parameters.Add("@Phone", txtPhone.Text)

If txtFax.Text <> "" Then

SqlCommand1.Parameters.Add("@Fax", txtFax.Text)

Else

SqlCommand1.Parameters.Add("@Fax", "")

End If

SqlCommand1.Parameters.Add("@Location", txtLocation.Text)

SqlCommand1.Parameters.Add("@Skills", txtSkills.Text)

SqlCommand1.Parameters.Add("@Agency", txtAgency.Text)

'optional fields

If calCloseDate.Text <> "" Then

SqlCommand1.Parameters.Add("@CloseDate", Format(calCloseDate.Text,
"General
Date"))

Else

SqlCommand1.Parameters.Add("@CloseDate", "")

End If

If txtRate.Text <> "" Then

SqlCommand1.Parameters.Add("@Rate", Format(txtRate.Text, "Currency"))

Else

SqlCommand1.Parameters.Add("@Rate", "")

End If

SqlCommand1.ExecuteNonQuery()

Catch ex As Exception

MsgBox("Could not add record" & Chr(10) & ex.ToString())

Exit Function

Finally

SqlConnection1.Close()

End Try


MK,

Are you maybe adding the parameter to the parameterlist more times,
this
is not unlikely because normally we would have seen an instrucktion
as

\\\
SqlCommand1.Parameters("@JobNumber").value = xtJobRefNumber.Text
SqlCommand1.ExecuteNonQuery()
///
I hope this helps,

Cor
 
It sounds like there might be an issue with the
..
..(partially omitted)
..
Or perhaps you should check the
..
..(partially omitted)
..
Best of
..
..(partially omitted)
..

M K said:
System.Data.SqlClient.SqlException: Procedure or function AddJob has too
many arguments specified at
.
.(partially omitted)
.
ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior,
Boolean returnStream)
.
.(partially omitted)
.
at JobBank.frmJobDetails.SaveToDb(String type) in D:. .
.\JobDetails.vb:line 417


Michael C# said:
What's the exact error message text you're receiving? Can we assume that
the SP is in the Jobs database as well? A lot of possible problems come
to mind, but without the exact code and DDL it's all guesswork.

M K said:
Heres my SP: ( i am trying to add more than 1 field but get the same
error no matter how many i try to add, i thought i would try to insert
the primary key only and work up from there but the primary key insert
didnt work either. I can run the SP manually in Visual Studio .NET and
it works. When i try to do this it doesn't.

Any help is greatly appreciated... newbie here as well so please be
gentle :)

ALTER PROCEDURE dbo.AddJob
@JobNumber varchar(30)
AS
INSERT INTO [Jobs].[dbo].[Job]
(JobRefNum)
VALUES
(@JobNumber)


Code:
SqlCommand1.CommandType = CommandType.StoredProcedure
SqlCommand1.CommandText = "Jobs.dbo.AddJob"
SqlCommand1.Parameters.Add("@JobNumber", txtJobRefNumber.Text)
SqlCommand1.ExecuteNonQuery()
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Back
Top