未知错误 - 附近的语法不正确

时间:2012-07-04 17:40:42

标签: c# asp.net sql

我想知道为什么这个类不起作用,但是如果这段代码是直接在aspx页面中编写的,那就可以了。 我想在课堂上这样做,因为在几个页面中多次调用它来检查用户是否已被计为访客。 这样做的主要思想是计算看到我网站的用户数量。


错误是这样的: ':'

附近的语法不正确

描述:在执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息: System.Data.SqlClient.SqlException:':'附近的语法不正确。


这是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.IO;
using System.Data;
using System.Text;

namespace Project
{
    public class ipAddress
    {
        SQL com = new SQL(); //Class to make SQL connection and do querys
        public void GetPublicIP()
        {
            WebClient web = new WebClient();
            System.IO.Stream stream = web.OpenRead(url);
            string text = "";
            using (System.IO.StreamReader reader = new System.IO.StreamReader(stream))
            {
                text = reader.ReadToEnd();
                reader.Close();
            }
            string results = "";
            try
            {
                foreach (DataRow item in com.Execute("select * from table where ip = '" + text + "' and data = '" + DateTime.Now.ToShortDateString() + "';").Rows)
                {
                    results = item["ip"].ToString();
                }
                if (results == "")
                {
                    com.FazerComando("insert into table (ip, date) values ('" + text + "', '" + DateTime.Now.ToShortDateString() + "');");
                }
            }
            catch { }
        }
    }
 }

...问候

2 个答案:

答案 0 :(得分:5)

我们不知道这个SQL类是什么,但看起来你直接在SQL中注入了值,这是一个非常糟糕的主意。它邀请SQL injection attacks,混合代码和数据,并使数字和日期/时间值的转换比他们需要的更难。 (在这种特殊情况下,你很幸运 - 你正在构建的字符串只是无效的SQL。它不是,比如说,消灭你的数据库。)

相反,您应该使用参数化SQL ,其中您在SQL本身中包含“占位符”,并分别提供值。

假设SQL是您自己的类,您应该赋予它使用参数化SQL的便利。有关示例,请参阅SqlCommand.Parameters

答案 1 :(得分:0)

您的“text”变量中包含撇号(或更糟)。您基本上是自我注入SQL数据库。非常非常糟糕的juju。