2016-05-10 3 views
0

GridView読み込みセッション変数IDを入力したいのですが、{"Conversion failed when converting the nvarchar value 'finalProject.User' to data type int."}のような変換データ型にエラーがありますが、データベーステーブルはすでにintです。どのように私はそれを修正するには?

finalProject.Userasp.netセッションを使用してnvarchar値をデータ型intに変換するときに変換が失敗しました

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

ユーザーオブジェクト

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; 

マイコード

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

エラー enter image description here

答えて

1

文字列を整数として渡そうとしているようです。

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

UserIdは整数ですが、user.ToString()は文字列です。代わりにあなたのパラメータとしてこれを使用するつもりでしたか?

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

ToString()メソッドを削除すると、「System.DataExceptionの型がSystem.Data.dllで発生しましたが、ユーザーコードで処理されませんでした」という例外が発生しました。既知のマネージドプロバイダのネイティブタイプ " – user5695111

+1

に変更します。user.ToString()をConvert.TOInt32(Session [" UserId "])に置き換え、それが機能するかどうかを確認します。あなたは整数を渡す必要がありますか、user.ToString()の代わりにuser.Idを試すことができます –

+0

これは完璧に機能しますが、私が望む結果を得られませんでした。何も起こらなかった 。それは私がなぜ理解していないgridviewでfiilする必要がありますか? – user5695111

3

mark_hあなたはintstring値を渡しているが、あなたはまた、idを渡す方法を知らない権利です。 objectの代わりに適切なタイプを指定すると良いでしょう。

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

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

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

グリッドビュー – Usman

+0

を作成したページのコードを提供するか、 'GridView1.AutoGenerateColumns = true;'をコードに追加してください – Usman

1

になります私はあなたではなく、 "セッション[" ユーザーIDを "]" "()user.ToString" 間違った値を渡していると推定します。ユーザはオブジェクトであり、userIdは単一のid値のように見えます。値を送る前に変換するのを忘れないでください。

関連する問題