2013-05-10 3 views
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, пока я пытаюсь ответить на сообщение. Ошибка: неправильный синтаксис около '='. Я осмотрелся, чтобы найти другие вопросы, похожие на мои, но я не могу найти ничего, что стоило бы для меня.Runtime Exception Неправильный синтаксис Near '='

Я получаю сообщение об ошибке «da.fill (ds);». Любой человек может помочь мне в этом ... :(

ответ

1

postid из строки запроса, вероятно, не имеет значения, и в результате оператор TSQL является недействительным.

Добавить проверку для ли строки запроса обеспечиваются значение

Также убедитесь, что это значение в диапазоне вы ожидаете, и рассмотреть вопрос об использовании подготовленных заявлений/параметров -.. Ваш текущий метод оставляя вам открыть для SQL инъекций

+0

сообщения дан имеют значение. но все же я получаю ошибку .. – user2369497

+0

Какова ценность для postid? – Kami

+0

его тип данных int – user2369497

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 [email protected]"; //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(); 
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; 
Смежные вопросы