我想使用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] 删除。
我来说两句