2011-08-09 47 views
2

私はasp & SQLサーバーの新機能です。私はSQLクエリに問題があります。'00'の近くの構文が正しくありません

string obal ; 
     decimal _obalss = 0; 
     decimal obalss = 0; 
     sconnection c = new sconnection(); 
     string cus_id = Session["cusid"].ToString(); 
     DateTime maxdate = DateTime.Parse(fromdt.Text, new System.Globalization.CultureInfo("en-US")); 
     string mdate = maxdate.ToString(); 
     string query_sl = "select sum(amount) as amount from sale where cusid = " + cus_id + " and invdate < " + maxdate + " group by cusid"; 
     SqlDataReader dr = c.reader(query_sl); 
     if (dr.Read()) 
     { 
      decimal.TryParse(dr["amount"].ToString(), out _obalss); 
      obalss = _obalss; 
     } 
     else 
     { 
      obalss = 0; 
     } 
      dr.Close(); 
      dr.Dispose(); 
+2

クイック注:これは* SQLで行うにはASP.NETと*すべてとは何の関係も* *を持っていません。 –

+0

ブレークポイントを設定し、どのクエリがquery_sl文字列変数に生成されたかを確認して、実際に実行されたクエリを確認できるようにしてください。 – sll

答えて

11
string query_sl = "select sum(amount) as amount from sale where cusid = " + cus_id + " and invdate < " + maxdate + " group by cusid"; 

maxdateあなたは、単一引用符でそれを配置する必要があり、日付です。 さらにを使用すると、パラメータ化されたSQLクエリを使用する必要があります。そうしないと、SQLインジェクション攻撃に対して脆弱です。どのようにこのようなものについて:

string query_sl = "select sum(amount) as amount from sale where cusid = @CUSID and invdate < @MAXDATE group by cusid"; 
using(SqlCommand cmd = new SqlCommand(query_sl, c)) 
{ 
    cmd.Parameters.Add(new SqlParameter("@CUSID", SqlDbType.Int)).Value = cus_id; 
    cmd.Parameters.Add(new SqlParameter("@MAXDATE", SqlDbType.DateTime)).Value = maxdate; 
    ... 
} 
+0

+1パラメータ化クエリの場合 – Curt

+0

パラメータ化クエリの場合+1以上。 – MRAB

1
string query_sl = "select sum(amount) as amount from sale where cusid = " + cus_id + " and invdate < '" + maxdate + "' group by cusid"; 

お知らせに、maxdate周りの単一引用符...

関連する問題