使用会话变量时如何解决 ASP.Net“输入字符串格式不正确”错误
Posted
技术标签:
【中文标题】使用会话变量时如何解决 ASP.Net“输入字符串格式不正确”错误【英文标题】:How to resolve ASP.Net "Input string was not in a correct format" error when using session variable 【发布时间】:2016-08-30 06:53:31 【问题描述】:我试图从用户登录时设置的 ASP.NET 会话变量中获取用户的 ID。到目前为止,我已经尝试过:
<asp:SqlDataSource ID="useridsource" runat="server">
<SelectParameters>
<asp:SessionParameter Name="myuser" SessionField="user" Type="string" />
</SelectParameters>
</asp:SqlDataSource>
从会话变量中获取用户ID的C#代码:
int userid = Convert.ToInt16("SELECT [ID] * FROM [users] WHERE ([email] = @myuser)");
查询然后将用户 ID 插入 Post 表:
string query = "INSERT INTO userpost(categoryID, userID, adtitle, addescription, adphoto, uploadeddate) VALUES(@categorydata, @userid, @adtitle, @description, @image, @date)";
我知道在我的代码中设置 int userid 存在问题,但对于我的一生,我无法弄清楚如何解决它。 任何帮助将不胜感激!
【问题讨论】:
为什么你认为字符串SELECT ...
可以解析为数字呢?听起来您实际上想要运行查询。
您对Convert.ToInt16(...)
的使用没有意义,通常看起来像这样:Convert.ToInt16("15")
【参考方案1】:
作为 SLaks 的建议,您的问题是您尝试将字符串 "SELECT [ID] * FROM [users] WHERE ([email] = @myuser)"
转换为整数,但显然不能。
我认为您的意思是首先使用您尝试转换的字符串查询您的 SQL 数据库,然后当您获得结果 id 时,您可以将其转换为整数。然后你可以使用userid
整数。
请记住检查您是否确实有 SQL 查询的结果,以防您尝试查找不存在的电子邮件的用户 ID。
【讨论】:
【参考方案2】:首先连接数据库,执行 SQL 命令,然后将返回的 ID 转换为整数。
int userid;
SqlConnection sqlConnection1 = new SqlConnection("Your Connection String");
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT [ID] FROM [users] WHERE ([email] = @myuser)";
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
while (reader.Read())
userid = Convert.ToInt16(reader.GetValue(reader.GetOrdinal("ID")));
sqlConnection1.Close();
【讨论】:
以上是关于使用会话变量时如何解决 ASP.Net“输入字符串格式不正确”错误的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量
如何将从“选择”查询中获得的值存储到 ASP.net 中的会话变量中
Asp.net 核心中的会话和应用程序变量,以防我们使用 JWT 令牌(因此没有基于 cookie 的会话)