This is my code
SqlCommand cmd = new SqlCommand("spRegisterUser", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter username = new SqlParameter("@UserName", txtUserName.Text);
SqlParameter password = new SqlParameter("@Password", txtPassword);
SqlParameter email = new SqlParameter("@Email", txtEmail.Text);
SqlParameter userType = new SqlParameter("@UserType", SqlDbType.NVarChar, 200);
userType.Value = "Student";
cmd.Parameters.Add(username);
cmd.Parameters.Add(password);
cmd.Parameters.Add(email);
cmd.Parameters.Add(userType);
con.Open();
int ReturnCode = (int)cmd.ExecuteScalar(); //This is where it displays error message
if (ReturnCode == -1)
Any ideas?
Here is the error message
No mapping exists from object type System.Web.UI.WebControls.TextBox to a known managed provider native type.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: No mapping exists from object type System.Web.UI.WebControls.TextBox to a known managed provider native type.
Source Error:
Line 48: con.Open(); Line 49: Line 50: int ReturnCode = (int)cmd.ExecuteScalar(); Line 51: if (ReturnCode == -1) Line 52: {Source File: c:UsersMubashirDocumentsVisual Studio 2012ProjectsSit302GroupProjectSit302GroupProjectRegistrationRegistration.aspx.cs Line: 50
Stack Trace:
[ArgumentException: No mapping exists from object type System.Web.UI.WebControls.TextBox to a known managed provider native type.] System.Data.SqlClient.MetaType.GetMetaTypeFromValue(Type dataType, Object value, Boolean inferLen, Boolean streamAllowed) +2021139 System.Data.SqlClient.SqlParameter.GetMetaTypeOnly() +5287377 System.Data.SqlClient.SqlParameter.Validate(Int32 index, Boolean isCommandProc) +16 System.Data.SqlClient.SqlCommand.SetUpRPCParameters(_SqlRPC rpc, Int32 startCount, Boolean inSchema, SqlParameterCollection parameters) +122 System.Data.SqlClient.SqlCommand.BuildRPC(Boolean inSchema, SqlParameterCollection parameters, _SqlRPC& rpc) +78 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) +1379 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +175 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +53 System.Data.SqlClient.SqlCommand.ExecuteScalar() +149 Sit302GroupProject.Registration.btnRegister_Click(Object sender, EventArgs e) in c:UsersMubashirDocumentsVisual Studio 2012ProjectsSit302GroupProjectSit302GroupProjectRegistrationRegistration.aspx.cs:50 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9552602 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724
Here is the Stored Procedure
CREATE proc spRegisterUser @Username nvarchar(100), @Password nvarchar(200), @Email nvarchar(200), @UserType nvarchar(200), as Begin Declare @Count int Declare @ReturnCode int Select @Count = COUNT(UserName) from tblUsers where UserName = @UserName If @COunt > 0 Begin Set @Return = -1 End Else Begin Set @ReturnCode = 1 Insert into tblUsers values (@UserName, @Password, @Email, @UserType) End Select @ReturnCode as ReturnValue End
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You are passing txtPassword which is an object of TextBox, thus you are getting exception.
Problem is in line
SqlParameter password = new SqlParameter("@Password", txtPassword);
So change your code to
SqlParameter password = new SqlParameter("@Password", txtPassword.Text);
Method 2
This a function for passing SQL parameter to stored procedure:
public static SqlParameter Parameter( SqlDbType dbtype, string ParameterName, string Value)
{
SqlParameter param = new SqlParameter();
param.ParameterName = ParameterName;
param.SqlDbType = dbtype;
param.SqlValue = Value;
return param;
// cmd.Parameters.Add(param);
}
You can use this the function like this
SqlCommand cmd = new SqlCommand("SP_Name");
cmd.Parameter.Add(Parameter(SqlDbType.DateTime,"@Parameter",DateTimepicker.Text));
OR
SqlParameter[] parameters =
{
new SqlParameter("@Task", "insert"),
new SqlParameter("@Name", clsPluginHelper.DbNullIfNullOrEmpty(txtinstalName.Text)),
new SqlParameter("@Descp", clsPluginHelper.DbNullIfNullOrEmpty(txtInstDescp.Text)),
clsPluginHelper.Parameter(SqlDbType.DateTime, "@StartDate",dtpInstStartDate.Text),
clsPluginHelper.Parameter(SqlDbType.DateTime, "@EndDate",dtpInstalEndDate.Text)
};
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0