数据类型 varchar 和 varchar 在模运算符 c# web 服务中不兼容
The data types varchar and varchar are incompatible in the modulo operator c# web service
我正在用 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: The data types varchar and varchar
are incompatible in the modulo operator.
at mvcerp2.newpayment.saverecd(String total, String date, String
utrno, String modeofpayment, String transferdate, String trainer,
String typeofadj) in Z:\mvcerp2\mvcerp2\newpayment.asmx.cs:line 88
和SqlDataReader dr = cmd.ExecuteReader();
这是我的第88行
如何解决这个问题?
问题是''%' "+ paymentid +" '%''
。
首先,您使用了太多引号,这会结束文字并认为 %
是一个运算符。
其次,你很容易SQL注射。您可以通过向查询添加参数轻松解决此问题。您的最后一个查询应如下所示:
where paymentid like '%' + @paymentid +'%'
将此添加到您的命令中:
cmd.Parameters.AddWithValue("@paymentid", paymentid);
您还可以在客户端组合字符串,这意味着您最终会得到:
where paymentid like @paymentid
将此添加到您的命令中:
cmd.Parameters.AddWithValue("@paymentid", "%" + paymentid + "%");
我正在用 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: The data types varchar and varchar are incompatible in the modulo operator.
at mvcerp2.newpayment.saverecd(String total, String date, String utrno, String modeofpayment, String transferdate, String trainer, String typeofadj) in Z:\mvcerp2\mvcerp2\newpayment.asmx.cs:line 88
和SqlDataReader dr = cmd.ExecuteReader();
这是我的第88行
如何解决这个问题?
问题是''%' "+ paymentid +" '%''
。
首先,您使用了太多引号,这会结束文字并认为 %
是一个运算符。
其次,你很容易SQL注射。您可以通过向查询添加参数轻松解决此问题。您的最后一个查询应如下所示:
where paymentid like '%' + @paymentid +'%'
将此添加到您的命令中:
cmd.Parameters.AddWithValue("@paymentid", paymentid);
您还可以在客户端组合字符串,这意味着您最终会得到:
where paymentid like @paymentid
将此添加到您的命令中:
cmd.Parameters.AddWithValue("@paymentid", "%" + paymentid + "%");