简体   繁体   中英

No mapping exists from object type System.Web.UI.WebControls.TextBox to a known managed provider native type

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:\\Users\\Mubashir\\Documents\\Visual Studio 2012\\Projects\\Sit302GroupProject\\Sit302GroupProject\\Registration\\Registration.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:\\Users\\Mubashir\\Documents\\Visual Studio 2012\\Projects\\Sit302GroupProject\\Sit302GroupProject\\Registration\\Registration.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

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);

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)
};

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM