使用会话变量时如何解决 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核心

Asp.net 核心中的会话和应用程序变量,以防我们使用 JWT 令牌(因此没有基于 cookie 的会话)

Chrome 和 IE 不发送 ASP.NET_SessionID - 即会话变量丢失?

在 ASP.NET 中注销时如何杀死用户的会话