Microsoft Knowledge Base Email Alertz

KBAlertz.com: Either of the following errors occur when you execute an Active Server Pages (ASP) page that is making subsequent stored procedure calls:

Receive Microsoft Knowledge Base articles by E-Mail?

Every night we scan the Microsoft Knowledge Base. If technologies you're interested in are updated, we'll send you an e-mail. You only get one e-mail a day, and only when new articles are added.

Click here to create a
FREE account
Already have an account?
[Click here to Login]

Search KbAlertz

Advanced Search

Webmasters
Put kbAlertz on your website.
[ Click Here for more! ]





ASP.NET 3.5 Web Hosting with Windows 2008 and SQL 2008: Click Here!
Discount ASP.NET Hosting
ASP.NET 2.0 and 3.5
Windows2008 and SQL2008
US and UK Hosting
KBAlertz referrals get
** SIX MONTHS FREE **


Community Site



We Send hundreds of thousands of emails using ASP.NET Email


ASP.NET 3.5 Web Hosting with Windows 2008 and SQL 2008: Click Here!
Discount ASP.NET Hosting
ASP.NET 2.0 and 3.5
Windows2008 and SQL2008
US and UK Hosting
KBAlertz referrals get
** SIX MONTHS FREE **




Mentioned In








Microsoft Knowledge Base Article

This article contents is Microsoft Copyrighted material.
©2005-©2007 Microsoft Corporation. All rights reserved. Terms of Use | Trademarks




Article ID: 178038 - Last Review: March 14, 2005 - Revision: 2.2

PRB: Implicit Conversion Error Calling Second Stored Procedure

This article was previously published under Q178038

On This Page

SYMPTOMS

Either of the following errors occur when you execute an Active Server Pages (ASP) page that is making subsequent stored procedure calls:

Implicit conversion from the datatype 'varchar' to 'int' is not allowed. Use the convert function to run this query.
Too many parameters were supplied for procedure <your stored procedure>.

CAUSE

Two conditions that cause this error to occur are as follows:

  • More than one call to a stored procedure using the same ADODB.Command object.

    -or-
  • The parameters passed to the stored procedure are of a different data type from one stored procedure call to the other.
The root cause of this behavior is that the parameters in the command object's parameter collection are not overwritten with subsequent definitions; you must first delete the parameter(s) from the Parameters Collection before defining a new parameter(s) in the collection.

RESOLUTION

Delete the parameter(s) in question using the "Delete" method of the collection object.
   collection.Delete Index
				
The collection placeholder represents the collection from which you want to delete an object. The Index argument is a string representing the name of the object you want to delete.

The Index in the preceding syntax works only for named parameters; a numeric index does not work. In other words, you must name your parameter when you use CreateParameter to create the parameter.

If you use the DataCommand control in Visual InterDev to add the code necessary to accomplish the stored procedure call, Visual InterDev inserts code to re-create the Command object. This is a valid approach, but it does add overhead of re-creating the object.

STATUS

This behavior is by design.

MORE INFORMATION

Steps to Reproduce Behavior

  1. Open or create a new project in Visual InterDev.
  2. Add a dataconnection named "pubs" to the project and point the data source name (DSN) to the "Pubs" database in SQL Server 6.5.
  3. Create two stored procedures that take input parameters of different data types.

       create procedure sp_varchar
       @cust varchar
       AS
       SELECT *
       FROM employee
    						


    -and-
       create procedure sp_int
       @cust int
       AS
       SELECT *
       FROM employee
    					
  4. Add a new ASP page to the project that calls the two stored procedures using the same command object. The code example is as follows:
    
       ==============sample ASP code===============
       <%
       Set pubs = Server.CreateObject("ADODB.Connection")
       pubs.ConnectionTimeout = Session("pubs_ConnectionTimeout")
       pubs.CommandTimeout = Session("pubs_CommandTimeout")
       pubs.Open Session("pubs_ConnectionString"),
       Session("pubs_RuntimeUserName"), Session("pubs_RuntimePassword")
       Set cmdTemp = Server.CreateObject("ADODB.Command")
       Set DataCommand1 = Server.CreateObject("ADODB.Recordset")
       cmdTemp.CommandText = "dbo.""sp_varchar"""
       cmdTemp.CommandType = 4
       Set cmdTemp.ActiveConnection = pubs
    
       'Syntax:
       'Set parameter = command.CreateParameter(Name, Type, Direction, Size,
       'Value)
       '200 is the value for Varchar datatype.
       '1 is the value for an input parameter.
    
       Set tmpParam = cmdTemp.CreateParameter("@cust", 200, 1, 6,"mytest")
       cmdTemp.Parameters.Append tmpParam
       DataCommand1.Open cmdTemp, , 0, 1
       %>
    
       <%
       '========================
       'The commented out line below is required to correctly clear the
       'varchar parameter before creating the int parameter. Uncomment the
       'line below and the code will work correctly.
       '========================
       'cmdTemp.Parameters.Delete "@cust"
    
       Set DataCommand2 = Server.CreateObject("ADODB.Recordset")
       cmdTemp.CommandText = "dbo.""sp_int"""
       cmdTemp.CommandType = 4
       Set cmdTemp.ActiveConnection = pubs
    
       'Integer data type with a value of 3
       Set tmpParam = cmdTemp.CreateParameter("@cust", 3, 1, 4,3)
       cmdTemp.Parameters.Append tmpParam
       DataCommand2.Open cmdTemp, , 0, 1
       %>
       ========end sample ASP code=================
    					

APPLIES TO
  • Microsoft ActiveX Data Objects 1.0
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.7
  • Microsoft Visual InterDev 1.0 Standard Edition
  • Microsoft Active Server Pages 4.0
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.7
Keywords: 
kbprb KB178038
       

Community Feedback System

Very often, it takes hours to solve a problem. Very often, you've looked high and low, and have tried a lot of solutions. When you finally found it, chances are, it was because someone else helped you. Here's your chance to give back. Use our community feedback tool to let others know what worked for you and what didn't.

Please also understand that the community feedback system is not warranted to be correct, it's simply a system that we've built to let people try and help each other. If something in a feedback response doesn't make sense to you, or you're not comfortable making changes that the feedback talks about (like registry edits), please consult a professional.

Thank you for using kbAlertz.com Feedback System.

-- Scott Cate

Be the first to leave feedback, to help others about this knowledge base article.

(Optional) Name

(Optional) Public URL Or Email

Comments
No HTML -- Text Only Please