无法将类型为'System.Data.SqlClient.SqlDataReader'的对象转换为键入'System.IConvertible'
问题描述:
我在面对这个错误的同时,我试图将会话对象类型转换为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();
请帮我解决这个错误!
答
首先你的代码很糟糕 - 它完全会被注入攻击黑掉。您应该使用参数化查询。
为你的问题,像这样的工作,但你真的应该做了很多错误检测和完整性检查:
reader = cmd.ExecuteReader();
reader.Read();
Session["userid"] = reader[0];
你也许应该看它有一些很好的例子文档 https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader(v=vs.110).aspx
'Session [“userid”] = reader'是问题,这不是读者如何工作......您为什么认为它是? – Hogan