运行时异常接近'='的语法不正确

时间:2013-05-10 10:05:45

标签: asp.net

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

3 个答案:

答案 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;