2016-12-14 1 views
1

に互換性のない私は、これはどのような私ですデータ型varchar型とvarchar型は、私はアプリでC#でWebアプリケーションを作成していモジュロ演算子C#のWebサービス

[WebMethod] 
[ScriptMethod(UseHttpGet = true)] 
public void saverecd(string total, string date, string utrno, string modeofpayment, string transferdate,string trainer, string typeofadj) 
{ 
    System.Globalization.CultureInfo enGB = new System.Globalization.CultureInfo("en-GB"); 
    DateTime dt = Convert.ToDateTime(date, enGB); 
    Int64 paymentid = 0; 
    string dt1 = dt.ToString("yyMMdd"); 
    string dt2 = dt1 + "0001"; 
    paymentid = Convert.ToInt64(dt2); 
    SqlCommand cmd = new SqlCommand("select max(paymentid)as paymentid from finalinstructoreexpense where paymentid like ''%' "+ paymentid +" '%''", con); 
    con.Open(); 
    SqlDataReader dr = cmd.ExecuteReader(); 
    while (dr.Read()) 
    { 
     paymentid = paymentid + 1; 
    } 
} 

トレーニング番号を見つけるためのWebサービスを作成しています今まで行っていたが、私は、Webサービスを実行すると、私はエラーに

System.Data.SqlClient.SqlExceptionを取得しています:データ型varchar型とvarchar はモジュロ演算子では互換性がありません。 Z中mvcerp2.newpayment.saverecd(文字列の合計、文字列、日付、文字列 utrno、文字列のmodeofpayment、文字列transferdate、文字列のトレーナー、 文字列typeofadj)で

:\ mvcerp2 \ mvcerp2 \ newpayment.asmx.cs:ライン88

SqlDataReader dr = cmd.ExecuteReader();これは、この問題を取り除くためにどのように88

私のラインである??

+0

基本的に、そのようなSQLの構築をやめてください。代わりにパラメータ化されたSQLを使用してください。現在はアポストロフィが多すぎますが、パラメータ化されたSQLを使用した場合、*アポストロフィはありません。パラメータがあるだけです。 –

答えて

4

問題が''%' "+ paymentid +" '%''です。

まず、あなたはリテラルを終了し、代わりに%がオペレータであると考えてあまりにも多くの引用符を使用しています。

第2に、SQLインジェクションが発生しやすくなります。クエリにパラメータを追加することで、これを簡単に解決できます。

where paymentid like '%' + @paymentid +'%' 

あなたのコマンドにこれを追加します:

cmd.Parameters.AddWithValue("@paymentid", paymentid); 

をそれはあなたがで終わる意味しますので、あなたはまた、文字列のクライアント側を組み合わせることができ、あなたのクエリの最後は次のようにお読みくださいこの:

where paymentid like @paymentid 

はあなたのコマンドにこれを追加します。

cmd.Parameters.AddWithValue("@paymentid", "%" + paymentid + "%"); 
+0

このアプローチについての疑問: ''%' + @paymentid + '%''。私はあなたがvalue = "%" + yourValue + "%"でパラメータを作成する必要があると思います。そして、それをクエリ 'WHERE column LIKE @ parameter'でも使用します。 – Fabio

+0

これも可能です。これは動作します。私を信用する@Fabio –

+0

@PatrickHofmanそれは実際にどのように動作するのですか? –

関連する問題