Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在模运算符c web服务中,数据类型varchar和varchar不兼容_C#_Sql Server_Varchar - Fatal编程技术网

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

C# 在模运算符c web服务中,数据类型varchar和varchar不兼容,c#,sql-server,varchar,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.Globa

我正在用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 在模运算符中不兼容

在mvcerp2.newpayment.saverecdString总计,字符串日期,字符串 utrno、字符串支付模式、字符串传输日期、字符串训练器、, Z:\mvcerp2\mvcerp2\newpayment.asmx.cs中的字符串类型ADJ:88行

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

如何解决这个问题???

问题是%'+paymentid+'%

首先,您使用了太多的引号,它以文本结尾,并认为%是一个运算符

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

where paymentid like '%' + @paymentid +'%'
将其添加到命令中:

cmd.Parameters.AddWithValue("@paymentid", paymentid);
cmd.Parameters.AddWithValue("@paymentid", "%" + paymentid + "%");
您还可以组合字符串客户端,因此这意味着您将得到以下结果:

where paymentid like @paymentid
将其添加到命令中:

cmd.Parameters.AddWithValue("@paymentid", paymentid);
cmd.Parameters.AddWithValue("@paymentid", "%" + paymentid + "%");
问题是%'+paymentid+'%

首先,您使用了太多的引号,它以文本结尾,并认为%是一个运算符

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

where paymentid like '%' + @paymentid +'%'
将其添加到命令中:

cmd.Parameters.AddWithValue("@paymentid", paymentid);
cmd.Parameters.AddWithValue("@paymentid", "%" + paymentid + "%");
您还可以组合字符串客户端,因此这意味着您将得到以下结果:

where paymentid like @paymentid
将其添加到命令中:

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

基本上,停止那样构建SQL。改用参数化SQL。现在你有太多的撇号,但是如果你使用参数化SQL,你就不会有任何撇号,你只需要一个参数。基本上,停止像那样构建SQL。改用参数化SQL。当前有太多的撇号,但如果使用参数化SQL,则不会有任何撇号-只会有一个参数。对这种方法有疑问:“%++@paymentid+'%”。我认为您需要使用value=%+yourValue+%创建参数。然后在像@parameter这样的列的查询中使用它,这也是可能的。这会奏效的。相信我@FabioI执行了类似以下操作SqlCommand cmd=new SqlCommandselect maxpaymentidas paymentid from finalinstructoreexpense,其中paymentid类似“%”@paymentid+“%”,con;cmd.Parameters。AddWithValue@paymentid,paymentid;有一个+缺少@MumbaiWadala:'%1!'+@对这种方法有疑问:'%2!'+@paymentid+'%。我认为您需要使用value=%+yourValue+%创建参数。然后在像@parameter这样的列的查询中使用它,这也是可能的。这会奏效的。相信我@FabioI执行了类似以下操作SqlCommand cmd=new SqlCommandselect maxpaymentidas paymentid from finalinstructoreexpense,其中paymentid类似“%”@paymentid+“%”,con;cmd.Parameters。AddWithValue@paymentid,paymentid;有一个+缺少@MumbaiWadala:“'”@