2013-10-06 19 views
7

nesne tipi System.Web.UI.WebControls.TextBox gelen var Bu benim kodHiçbir eşleme için bilinen yönetilen sağlayıcı yerel türü

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) 

Herhangi bir fikir mi? İşte

hata mesaj

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

Açıklama geçerli: işlenmeyen bir özel durum geçerli web isteği yürütülürken oluştu. Hata hakkında ve kodda nereden kaynaklandığı hakkında daha fazla bilgi için yığın izlemesini gözden geçirin. İşte

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 

böylece istisna alıyorsanız, Saklı Yordam

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 
+0

sizin sp benziyor nedir? –

+0

Ayrıca bkz. Http://stackoverflow.com/a/16714573/194717 – Tony

cevap

31

Sen TextBox bir nesnedir txtPassword geçiyoruz olduğunu.

Sorun

SqlParameter password = new SqlParameter("@Password", txtPassword); 

Yani

SqlParameter password = new SqlParameter("@Password", txtPassword.Text); 
1

için kodunuzu değiştirmeniz uyumludur Bu saklı yordam SQL parametresini geçirilmesi için bir fonksiyon:

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

kullanabilirsiniz bu bu işlev

SqlCommand cmd = new SqlCommand("SP_Name"); 
cmd.Parameter.Add(Parameter(SqlDbType.DateTime,"@Parameter",DateTimepicker.Text)); 

VEYA

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) 
}; 
İlgili konular