数据类型varchar和varchar在模运算符c#web服务中不兼容

时间:2016-12-14 06:55:18

标签: c# sql-server varchar

我在应用程序中使用c#创建一个Web应用程序我正在创建一个用于查找培训号码的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服务时,我收到了错误

  

System.Data.SqlClient.SqlException:数据类型为varchar和varchar   在模运算符中不兼容。

     

at mvcerp2.newpayment.saverecd(String total,String date,String   utrno,String modeofpayment,String transferdate,String trainer,   字符串typeofadj)在Z:\ mvcerp2 \ mvcerp2 \ newpayment.asmx.cs:第88行

SqlDataReader dr = cmd.ExecuteReader();这是我的第88行

如何摆脱这个问题??

1 个答案:

答案 0 :(得分:2)

问题是''%' "+ paymentid +" '%''

首先,您使用的引号太多,结束了字面值,而是认为%是运算符。

其次,您很容易进行SQL注入。您可以通过向查询添加参数来轻松解决此问题。您的最后一个查询应如下所示:

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

将此添加到您的命令:

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

你也可以组合字符串客户端,这意味着你最终得到这个:

where paymentid like @paymentid

将此添加到您的命令:

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