1

このクラスが機能しない理由を知りたいのですが、このコードがaspxページに直接記述されている場合は機能します。ユーザーがすでに訪問者としてカウントされているかどうかを確認するために、複数のページで数回呼び出されるため、これをクラスで使用したいと思います。これの主なアイデアは、私のWebサイトを見ているユーザーの数を数えることです。


エラーは次 のとおりです。「:」の近くの構文が正しくありません

説明:現在の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 { }
        }
    }
 }

よろしく...

4

2 に答える 2

5

このクラスが何であるかはわかりませんSQLが、SQLに直接値を挿入しているように見えます。これは非常に悪い考えです。SQLインジェクション攻撃を招き、コードとデータを混合し、数値と日付/時刻値の変換を必要以上に困難にします。(この特定のケースでは、幸運です。作成している文字列は無効なSQLです。たとえば、データベースを一掃することはありません。)

代わりに、SQL自体に「プレースホルダー」を含め、値を個別に提供するパラメーター化されたSQLを使用する必要があります。

独自のクラスであると仮定するSQLと、パラメーター化されたSQLを使用する機能をクラスに与える必要があります。例についてはを参照SqlCommand.Parametersしてください。

于 2012-07-04T17:42:52.280 に答える
0

「テキスト」変数にアポストロフィ(またはさらに悪い)が含まれています。基本的に、SQL データベースに自己注入しています。非常に悪いジュジュ。

于 2012-07-04T17:45:30.417 に答える