2017-10-20 12 views
0

セッションオブジェクト型をintに変換しようとしていたときにこのエラーが発生しました。この値を使用する必要がありますデータ型intの別のクエリです。'System.Data.SqlClient.SqlDataReader'タイプのオブジェクトを 'System.IConvertible'に変換できません

SqlConnection sqlConnection1 = new SqlConnection("Persist Security Info=False;Integrated Security=true;Initial Catalog=Remember;server=DESKTOP-59SGH72\\SQLEXPRESS;Trusted_Connection=True;Database=sport"); 
     SqlCommand cmd = new SqlCommand(); 
     SqlDataReader reader; 

     cmd.CommandText = "select user_id from users where user_name='" + Session["usern"] + "'"; 
     cmd.CommandType = CommandType.Text; 
     cmd.Connection = sqlConnection1; 

     sqlConnection1.Open(); 

     reader = cmd.ExecuteReader(); 

     Session["userid"] = reader; 

     var uid = Convert.ToInt16(Session["userid"]); 

     // Data is accessible through the DataReader object here. 

     sqlConnection1.Close(); 

このエラーで私を助けてください!

+0

'Session [" userid "] = reader'は、これが読者の仕組みではない問題です。なぜそれはだと思いますか? – Hogan

答えて

0

まず、あなたのコードはひどいです。注射攻撃によって完全にハックされることになります。パラメータ化されたクエリを使用する必要があります。

あなたの質問にとして、このようなものが働くだろうが、あなたは本当にエラーチェックと健全性チェックをたくさんやるべきこと:

reader = cmd.ExecuteReader(); 

reader.Read(); 

Session["userid"] = reader[0]; 

あなたはおそらく、いくつかの素晴らしい例 https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader(v=vs.110).aspxを持っているドキュメントを見ている必要があります

関連する問題