asp.net - 使用条件时,ASP.NET webforms 不会在 gridview 中检索查询
问题描述
如果没有条件子句(基本select * from table
语句),此代码将完美地检索数据,但是当我提供用户名和 order by 子句时它会失败
protected void Button2_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["mycon"].ToString());
string cname = TextBox2.Text;
Session[cname] = cname.ToString();
con.Open();
string sql = " select * from customer_reservations where customer_id='"
+ Session[cname] + "' order by reservation_time ";
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader reader = cmd.ExecuteReader();
GridView1.DataSource = reader;
GridView1.DataBind();
/*"select *from customer_reservations where customer_id='" + cname +
"' order by reservation_time";
*/
/* select *from customer_reservations */
}
在SQL Serverreservation_time
中存储为datetime
数据类型,并且似乎可以访问,因为当我执行select *
语句时,它会在浏览器中将 14' O 时钟转换为 2pm
解决方案
好的,cname 是文本还是数字?您必须检查数据库。
但是,总是很容易弄乱字符串连接,因此我建议这样做:
protected void Button1_Click(object sender, EventArgs e)
{
{
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["mycon"].ToString()))
{
string cname = TextBox2.Text;
Session["cname"] = cname.ToString();
con.Open();
string sql = " select * from customer_reservations where customer_id = @cname "
+ " order by reservation_time";
SqlCommand cmd = new SqlCommand(sql, con);
cmd.Parameters.Add("@cname", SqlDbType.NVarChar).Value = cname;
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
}
}
}
因此,在没有所有这些引号的情况下写出 sql 往往更容易。奖励是我们获得了 sql 注入安全代码。
所以试试上面。
另外,检查您的页面加载事件。如果它加载网格或执行任何操作,那么您总是,但总是希望只在第一页加载时运行代码,因此:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
LoadGrid();
}
作为一个仅供参考,你会需要这个:
Session["cname"] = cname;
为了获得价值,你需要这个:
some var = Session["cname"].ToString();
您实际上创建了实际文本值的会话变量!!- 不是所谓的“cname”。
第二个仅供参考:
如果你想在网格上使用分页,那么你不能给 GV 一个“阅读器”,因此你需要/应该使用这个:
string sql = " select * from customer_reservations where customer_id = @cname "
+ " order by reservation_time";
SqlCommand cmd = new SqlCommand(sql, con);
cmd.Parameters.Add("@cname", SqlDbType.NVarChar).Value = cname;
DataTable rstData = new DataTable();
rstData.Load(cmd.ExecuteReader());
GridView1.DataSource = rstData;
GridView1.DataBind();
推荐阅读
- rpmbuild - RPM-SPEC - Bash 脚本未安装 %post SPEC 文件中指定的软件包
- batch-file - 从命令提示符运行时批处理文件有效,但单击时无效
- azure - 仅向少数应用程序打开 Azure 应用服务终结点
- javascript - 为什么 Sequelize 迁移创建表但模型无法连接到数据库
- ios - which is the best way to implement the offset in collection view?
- mysql - MySQL-如何在给定周数的情况下提取星期一?
- r - R-Markdown 的 render_site 函数正在删除 .git 文件夹的内容
- c# - 在 C# 中编辑 XPS 打印假脱机文件(.SPL 扩展名)(另存为 Zip 问题)
- c# - 如何解析txt文件中的netstat输出并根据PID获取所有远程IP地址作为变量?
- ubuntu - 为什么每个 JavaFX 应用程序都会在我的系统上闪烁?