【发布时间】:2015-05-10 23:57:07
【问题描述】:
我正在尝试在标签中显示数据库中的数据(银行名称)。
每个用户在费率表中有四个银行 ID。我想从银行表中检索他们的名字。用户 id 是会话变量。
查询命令是正确的,但是当我添加会话变量时出现错误。
异常详细信息:System.Data.SqlClient.SqlException:'=' 附近的语法不正确。
来源错误:
第 26 行:str = "select bank_name from bank, rate, [user] where((bank.bank_id=rate.bank_id)and(user.user_id=rate.user_id='" + Session["UserName"] + "'" ;
第 27 行:com = new SqlCommand(str, con);
第 28 行:SqlDataReader reader = com.ExecuteReader();
第 29 行:
第 30 行:reader.Read();
代码:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
namespace Displaying_Data_From_Db_to_Label
{
public partial class _Default : System.Web.UI.Page
{
string strConnString = ConfigurationManager.ConnectionStrings["AdminConnectionString"].ConnectionString;
string str;
SqlCommand com;
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(strConnString);
con.Open();
str = "select bank_name from bank, rate, [user] where((bank.bank_id=rate.bank_id)and(user.user_id=rate.user_id='" + Session["UserName"] + "'";
com = new SqlCommand(str, con);
SqlDataReader reader = com.ExecuteReader();
reader.Read();
labelname1.Text = reader["bank_name"].ToString();
reader.Read();
labelname2.Text = reader["bank_name"].ToString();
reader.Read();
labelname3.Text = reader["bank_name"].ToString();
reader.Close();
con.Close();
}
}
}
Aspx 标记:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Displaying_Data_From_Db_to_Label._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="labelname1" runat="server" Text="Label"></asp:Label>
<asp:Label ID="labelage1" runat="server" Text="Label"></asp:Label><br />
<asp:Label ID="labelname2" runat="server" Text="Label"></asp:Label>
<asp:Label ID="labelage2" runat="server" Text="Label"></asp:Label><br />
<asp:Label ID="labelname3" runat="server" Text="Label"></asp:Label>
<asp:Label ID="labelage3" runat="server" Text="Label"></asp:Label>
</div>
</form>
</body>
</html>
【问题讨论】:
-
通过代码调试时
Session["UserName"]的值是多少? -
SQL Injection alert - 您应该不将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入
-
@paqogomez Session["UserName"] 是从文本框中存储的文本
-
你确定吗?您的错误表明您在该值中有错误数据或没有数据。使用@THBBFT 的答案,并通过您的代码进行调试以准确查看其值。
-
如果没记错的话,Session 是一个老式的专业集合 ... brb ...right
HttpSessionState,带有返回Object的索引器。因此,通过将其分配给字符串,您将调用隐式转换为字符串。我将更新我的示例以添加一个附加断点的位置。
标签: c# sql asp.net sql-server