sql asp.net中的会话if语句和id值

保罗·杜海伦格索德(Paolo Duhaylungsod)

我想使用if语句将会话值与ID值进行比较。到目前为止,我得到了:

string strConnString = "Data Source = 'PAULO'; Initial Catalog=ShoppingCartDB;Integrated Security =True";
    string str;
    SqlCommand com;
    protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(strConnString);

        con.Open();
        str = "select * from CustomerDetails Where CustomerName = '"+Session["New"].ToString()+"'";
        com = new SqlCommand(str, con);
        SqlDataReader reader = com.ExecuteReader();
        List<string> ListOfId = new List<string>();
        while (reader.Read())
        {

            ListOfId.Add(reader["Id"].ToString());
        }
        if (!IsPostBack)
        {

            if (Session["New"].ToString() == Request.QueryString["Id"])
            {
                Success
            }
else
{
error
}

我想要发生的是,当会话值(“用户名”)在sql中没有等效的id值时,它将被重定向到错误页面。

在此处输入图片说明

就像上面的图片一样,这些id值来自用户名“ faufao”。if session("faufao" = "13"),它将继续。否则,如果用户名是faufao,且id值为4,它将进入错误页面。

在下面的图片上。我将标签值替换为会话和ID查询字符串。faufao(session)在数据库中具有14(query)值,因此应该继续进行。13 15 16 17 18 18 19等也是如此。faufao(session)用户名中未包含的其他值将重定向到错误。

在此处输入图片说明

该代码正在运行。它捕获会话和id值(在标签中尝试过)。我现在的问题是如何比较它们。

我的代码:

if (Session["New"].ToString() == Request.QueryString["Id"])
            {
                Proceed
            }
else
{
error
}

好像我在这里缺少什么。因为它总是将我重定向到错误页面,即使session:faufao的查询字符串为13。

尝试了您的代码,然后单击ID 13

在此处输入图片说明

faufao的id值为13,但仍重定向到错误页面。

里恩·威廉姆斯

您现有的代码中有一些值得解决的问题,有望解决您的一些问题。

使用参数化而不是串联

您应该利用.NET的内置支持来处理SQL参数,当连接查询字符串时,它可以帮助您避免诸如SQL Injection攻击和语法错误之类的讨厌事情:

using(var con = new SqlConnection(strConnString))
{
    con.Open();
    var query = "SELECT * FROM CustomerDetails WHERE CustomerName = @name";
    using(var com = new SqlCommand(query,con))
    {
        // This will help avoid any nastiness with your existing syntax
        com.Parameters.AddWithValue("@name", Convert.ToString(Session["New"]));

        // Execute your query here
    }
}

可能的逻辑问题

您提到要比较您的Session值和QueryString中的值。如果是这种情况,则完全不需要访问数据库,因为在该区域被命中时,这两个值都应同时存在:

if(Convert.ToString(Session["New"]) != Convert.ToString(Request["Id"]))
{
      // The two values are different, so redirect
      Response.Redirect("Error.aspx");
}

我想要发生的是,当会话值(“用户名”)在sql中没有等效的id值时,它将被重定向到错误页面。

如果是这种情况,那么在执行查询后,您可以简单地检查是否找到了任何ID值,如果没有找到,则可以重定向:

if(!ListOfIds.Any())
{
      // No matches were found, redirect
      Response.Redirect("Error.aspx");
}

如果要使用从数据库返回的值,或者检查它是否是存在的多个值之一,也可以执行以下操作:

// Assuming you have all of your ID values within your list after executing
if(!ListOfId.Contains(Convert.ToString(Session["New"]))
{
     // If your IDs don't contain your Session value, redirect
     Response.Redirect("Error.aspx");
}

更新

根据您的更新,听起来您只是想查看数据库中是否存在用户/标识的某种组合。如果是这种情况,您可以相应地更新查询:

using(var con = new SqlConnection(strConnString))
{
    con.Open();
    var query = "SELECT * FROM CustomerDetails WHERE CustomerName = @name AND ID = @id";
    using(var com = new SqlCommand(query,con))
    {
        // This will help avoid any nastiness with your existing syntax
        com.Parameters.AddWithValue("@name", Convert.ToString(Session["New"]));
        com.Parameters.AddWithValue("@id",Convert.ToInt32(Request["Id"]));

        // Execute your query
        using(var reader = com.ExecuteReader())
        {
              if(!reader.HasRows)
              {
                  // Redirect
                  Response.Redirect("Error.aspx");
              }  
              // Do something here
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

asp.net 会话未存储在 sql 中

来自分类Dev

Asp.Net SQL删除语句

来自分类Dev

Asp.Net SQL更新语句

来自分类Dev

ASP.Net SQL Server 会话状态与持久会话状态

来自分类Dev

ASP.NET MVC 和 SQL Server 中的十进制值

来自分类Dev

SQL会话状态-数据库SessionId与ASP.NET_SessionID值不同

来自分类Dev

关于ASP.NET和SQL Server中的C#

来自分类Dev

Asp.Net SQL会话模式不会返回JQuery帖子

来自分类Dev

ASP.Net MVC中的SQL Server会话序列化

来自分类Dev

在多个应用程序中以SQL Server模式访问ASP.NET会话

来自分类Dev

ASP.NET MVC中的单个SQL

来自分类Dev

SQL中的COUNT函数-ASP.NET

来自分类Dev

在ASP.NET C#中的sql之间写入的IF条件语句

来自分类Dev

将vb变量传递给ASP.NET中的SQL语句

来自分类Dev

刷新存储在asp.net中的会话中的值

来自分类Dev

对ASP中的参数化SQL语句进行故障排除

来自分类Dev

在javascript中获取ASP.NET会话值?

来自分类Dev

SQL Server ID 列和 DDL selectedindex 之间的 ASP.NET DropDownList 差异

来自分类Dev

从数据库返回某些值的安全方法(SQL SERVER和ASP.NET)

来自分类Dev

使用asp.net将值插入SQL Server

来自分类Dev

在SQL SELECT查询中使用ASP.NET TextBox的值

来自分类Dev

asp.net sql按一定值排序

来自分类Dev

是否可以共享 SQL Server 数据库以在 Asp.Net Web Forms 中存储会话状态

来自分类Dev

ASP.Net Identity Force从SQL注销

来自分类Dev

带有SQL Server的ASP.NET

来自分类Dev

ASP.Net SQL文本解析HTML

来自分类Dev

ASP.NET SQL Server连接别名

来自分类Dev

防止从SQL查询复制,ASP.net

来自分类Dev

SQL性能问题ASP.Net App