2016-05-10 3 views
0

Ich möchte die GridView lesen Sitzung Variablen-ID, aber ich habe Fehler, dass zum Konvertieren von Datentyp wie , aber ich habe nicht Nvarchar Wert in meinem Datenbanktabelle ist bereits int. Wie kann ich es reparieren?

finalProject.Userasp.net Konvertierung fehlgeschlagen beim Konvertieren der Nvarchar-Wert in den Datentyp int Sitzung

public class User 
{ 
    public int Id { get; set; } 
    public string name { get; set; } 
    public string surname { get; set; } 
    public string email { get; set; } 
} 

Benutzerobjekt

User u = new User(); 
       u.Id = Convert.ToInt32(dr["Id"]); 
       u.name = dr["name"] != DBNull.Value ? dr["name"].ToString() : string.Empty; 
       u.surname = dr["surname"] != DBNull.Value ? dr["surname"].ToString() : string.Empty; 
       u.email = dr["email"] != DBNull.Value ? dr["email"].ToString() : string.Empty; 
       Session["user"] = u; 

Meine Codes

public partial class MyConferences : System.Web.UI.Page 
{ 
    internal User user; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if(!IsPostBack) 
     { 
      BindGrid(); 
     } 
    } 

    private void BindGrid() 
    { 
     object user = Session["user"]; 

     if(user != null) 
     { 
      user = Session["user"] as User; 
     }   

     string constr = ConfigurationManager.ConnectionStrings[0].ConnectionString; 

     using(SqlConnection con = new SqlConnection(constr)) 
     { 
      string query = "select Conferences.conferenceName , Conferences.conferenceDate , Conferences.conferencePlace , Conferences.category from Conferences inner join Users on Conferences.fk_Users = Users.Id where Users.Id = @UserId"; 

      using(SqlCommand cmd = new SqlCommand(query)) 
      { 
       cmd.Connection = con; 
       Convert.ToInt32(Session["UserId"]); 

       SqlParameter prm = cmd.Parameters.AddWithValue("@UserId", user.ToString()); 

       if(user == null) 
       { 
        prm.Value = DBNull.Value; 
       } 

       con.Open(); 
       GridView1.DataSource = cmd.ExecuteReader(); 
       GridView1.DataBind(); 
       con.Close(); 
      } 
     }   
    } 
} 

Fehler

Antwort

1

Es scheint, dass Sie versuchen, eine Zeichenfolge als Ganzzahl zu übergeben;

UserId ist eine ganze Zahl, aber user.ToString() ist eine Zeichenfolge. Wolltest du das stattdessen als Parameter verwenden?

Convert.ToInt32(Session["UserId"]) 
+0

Wenn ich die ToString() Methoden jetzt entfernen, habe ich Fehler, der ist "Eine Ausnahme vom Typ 'System.ArgumentException' in System.Data.dll aufgetreten ist, aber nicht im Benutzercode behandelt wurde" und "Keine Zuordnung existiert vom Objekttyp zu einem bekannten verwalteten Anbieter nativen Typ " – user5695111

+1

Ersetzen Sie user.ToString() mit Convert.TOInt32 (Sitzung [" UserId "]) und sehen, ob das funktioniert. Sie müssen eine Ganzzahl übergeben, oder Sie könnten user.Id anstelle von user.ToString() versuchen –

+0

Es funktioniert einwandfrei, aber ich habe nicht das gewünschte Ergebnis erhalten. Nichts ist passiert . Es sollte in der Gridview sein, ich verstehe nicht warum? – user5695111

3

mark_h stimmt Sie string Wert int sind vorbei, aber Sie nicht auch wissen, wie die id passieren. Es wäre besser, wenn Sie statt object den richtigen Typ angeben.

object user = Session["user"] as User; 

wird

User user = Session["user"] as User; 

und

SqlParameter prm = cmd.Parameters.AddWithValue("@UserId", user.Id); 
+0

können Sie Geben Sie den Code der Seite an, auf der Sie die Gridview – Usman

+0

erstellt haben, oder fügen Sie im Code einfach "GridView1.AutoGenerateColumns = true;" hinzu – Usman

1

Ich nehme an, Sie werden einen falschen Wert "user.ToString()" sind vorbei eher "Session [" UserId "]". Der Benutzer ist ein Objekt und userId sieht wie ein einzelner ID-Wert aus. Vergessen Sie nicht zu konvertieren, bevor Sie Wert senden.

Verwandte Themen