0
<%@ 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);”上遇到错误。任何人都可以帮助我解决这个问题...... :(

4

3 回答 3

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();
于 2013-05-10T10:08:10.197 回答
1

postid来自查询字符串的可能没有值,因此 TSQL 语句无效。

添加检查是否提供了查询字符串值。

还要验证它的值是否在您期望的范围内,并考虑使用准备好的语句/参数-您当前的方法使您对 sql 注入开放。

于 2013-05-10T10:07:27.647 回答
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;
于 2013-05-10T12:27:44.830 回答