<%@ Page Language="C#" AutoEventWireup="true" CodeFile="postreplyadmin.aspx.cs" Inherits="postreplay" MasterPageFile="~/AdminMaster.master" Title="Post-Reply Page"%>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<asp:Content ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<%
String postid = Request.QueryString["id"];
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["civilRegDB"].ConnectionString);
con.Open();
String sql = "select * from Forumthread where PostID=" + postid;
SqlDataAdapter da=new SqlDataAdapter(sql,con);
DataSet ds=new DataSet();
da.Fill(ds);
DataRow drow = ds.Tables[0].Rows[0];
String name = drow["Name"].ToString();
String desc = drow["Description"].ToString();
DateTime dt = Convert.ToDateTime(drow["PostDate"].ToString());
String postdate = dt.ToString("dd/MM/yyyy",System.Globalization.CultureInfo.InvariantCulture );
String mailid = drow["Email"].ToString();
%>
</asp:content>
我正在尝试回复帖子时收到sqlexception。错误:'='附近的语法不正确。我环顾四周寻找与我类似的其他问题,但我找不到任何有价值的东西。
我在“da.fill(ds);”上遇到错误。任何人都可以帮助我...... :(
答案 0 :(得分:2)
您的postid
是一个字符串,应该用单引号'
String sql = "select * from Forumthread where PostID='" + postid +"'";
但更好的方法是使用SqlParameter来保存自己SQL Injection。
像:
String postid = Request.QueryString["id"];
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["civilRegDB"].ConnectionString);
con.Open();
String sql = "select * from Forumthread where PostID=@postID"; //parameter
SqlCommand cmd = new SqlCommand(sql, con);
cmd.Parameters.AddWithValue("postID", postid);
SqlDataAdapter da = new SqlDataAdapter(cmd); // pass command to adapter
DataSet ds = new DataSet();
da.Fill(ds);
DataRow drow = ds.Tables[0].Rows[0];
String name = drow["Name"].ToString();
String desc = drow["Description"].ToString();
DateTime dt = Convert.ToDateTime(drow["PostDate"].ToString());
String postdate = dt.ToString("dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);
String mailid = drow["Email"].ToString();
答案 1 :(得分:1)
postid
可能没有值,因此TSQL语句无效。
添加检查是否提供查询字符串值。
同时验证它的值是否在您期望的范围内,并考虑使用预准备语句/参数 - 您当前的方法是让您打开sql注入。
答案 2 :(得分:0)
您是否按照其中一个答案
的建议尝试按照说明进行操作替换String sql = "select * from Forumthread where PostID=" + postid;
String sql = "select * from Forumthread where PostID='" + postid + "'";
或强>
如果它不起作用,则可能是您必须在查询中直接使用int。 为此,只需在整数变量中获取queryString值。 像:
int postid = Convert.ToInt32(Request.QueryString["id"]);
和
String sql = "select * from Forumthread where PostID=" + postid;