MANISH KISHORE
MANISH KISHORE

Reputation: 47

Error converting [data type] nvarchar to integer

I have an application which will allow the user to insert their details. but I am getting an error. I have already tried the solutions that are available on StackOverflow or any other blog.

here is the c# code.

if (Page.IsValid)
    {

        string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;

        using (SqlConnection con = new SqlConnection(CS))
        {
            SqlCommand cmd = new SqlCommand("spRegisterUser", con)
            {
                CommandType = CommandType.StoredProcedure
            };

            SqlParameter username = new SqlParameter("@UserName", txtUserName.Text);

            string encryptedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text, "SHA1");
            SqlParameter password = new SqlParameter("@Password", encryptedPassword);
            SqlParameter email = new SqlParameter("@Email", txtEmail.Text);
            SqlParameter mobileno = new SqlParameter("@MobileNo", txtMobileNo.Text);

            cmd.Parameters.Add(username);
            cmd.Parameters.Add(password);
            cmd.Parameters.Add(email);
            cmd.Parameters.Add(mobileno);
            con.Open();

            int ReturnCode = (int)cmd.ExecuteScalar();
            if (ReturnCode == -1)
            {
                lblMessage.Text = "User Name already in use, please choose another user name";
            }
            else
            {
                Response.Write("Login Successfully");
                //Response.Redirect("~/Login.aspx");
            }
        }
    }
}

Here is the Stored Procedure

create proc spRegisterUser  
@UserName nvarchar(100),  
@Password nvarchar(200),  
@Email nvarchar(200),  
@MobileNo int

 declare @count int  
 declare @returncode int  

 --declare @count1 int  
 --declare @returncode1 int  

 select @count = count(username)  
 from tblUser where UserName=@UserName  
 if @count>0  
 begin   
 set @returncode = -1  
 end  
 else  
 begin   
 set @returncode=1  

 insert into tblUser values(@UserName,@Password,@Email,@MobileNo)  
 End  
 select @returncode as ReturnValue  
 End  

This is the Stack Trace

     [SqlException (0x80131904): Error converting data type nvarchar to int.]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +2551578
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5951128
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +285
   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4169
   System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +58
   System.Data.SqlClient.SqlDataReader.get_MetaData() +89
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted) +430
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) +2598
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) +1483
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +64
   System.Data.SqlClient.SqlCommand.ExecuteScalar() +271
   Project.WebForm2.btnSubmit_Click(Object sender, EventArgs e) in E:\Visual Studio 2012\Project\Project\Registration\SignUp.aspx.cs:54
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9782378
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +204
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639

Please Provide Solution as soon as possible

Upvotes: 0

Views: 4331

Answers (1)

Mudassir Hasan
Mudassir Hasan

Reputation: 28741

The problem is being caused by passing values to @MobileNo parameter which you have declared as integer in stored procedure. You need to have validation in code behind before passing value from txtMobileNo.Text to @MobileNo parameter which validates that value entered in textbox is valid integer.

See Int32.TryParse method to validate text is valid integer.

Otherwise declare @MobileNo parameter in stored proc to VARCHAR eg

create proc spRegisterUser  
@UserName nvarchar(100),  
@Password nvarchar(200),  
@Email nvarchar(200),  
@MobileNo VARCHAR(15)

--Rest of code

Upvotes: 1

Related Questions