I have developed following web service in vs2008 but cannot resolve th following error

System.Data.SqlClient.SqlException: Arithmetic overflow error converting varchar to data type numeric.

here is my web service code

```
using System;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
private string strConn = "";
public Service()
{
strConn = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
}
[WebMethod]
public void Update(int ppid,string ppname,int a,int b,int c,long d)
{
SqlConnection cnn = new SqlConnection(strConn);
cnn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = cnn;
if (a == 0 && b == 0 && c == 0)
cmd.CommandText = "update products set prod_normal_price='prod_normal_price+cast(@d as numeric(18,0))/100*prod_normal_price' where product_id=@id and prod_name=@pname";
if (a == 0 && b == 0 && c == 1)
cmd.CommandText = "update products set prod_normal_price='prod_normal_price-cast(@d as numeric(18,0))/100*prod_normal_price' where product_id=@id and prod_name=@pname";
if (a == 0 && b == 0 && c == 2)
cmd.CommandText = "update products set prod_normal_price=(prod_normal_price*cast(@d as numeric(18,0))/100*prod_normal_price) where product_id=@id and prod_name=@pname";
if (a == 0 && b == 0 && c == 3)
cmd.CommandText = "update products set prod_normal_price=(prod_normal_price/(cast(@d as numeric(18,0))/100*prod_normal_price)) where product_id=@id and prod_name=@pname";
if (a == 1 && b == 0 && c == 0)
cmd.CommandText = "update products set prod_current_price=(prod_normal_price+cast(@d as numeric(18,0))/100*prod_normal_price) where product_id=@id and prod_name=@pname";
if (a == 1 && b == 0 && c == 1)
cmd.CommandText = "update products set prod_current_price=(prod_normal_price-cast(@d as numeric(18,0))/100*prod_normal_price) where product_id=@id and prod_name=@pname";
if (a == 1 && b == 0 && c == 2)
cmd.CommandText = "update products set prod_current_price=(prod_normal_price*cast(@d as numeric(18,0))/100*prod_normal_price) where product_id=@id and prod_name=@pname";
if (a == 1 && b == 0 && c == 3)
cmd.CommandText = "update products set prod_current_price=(prod_normal_price/cast(@d as numeric(18,0))/100*prod_normal_price) where product_id=@id and prod_name=@pname";
if (a == 0 && b == 1 && c == 0)
cmd.CommandText = "update products set prod_normal_price='prod_current_price+cast(@d as numeric(18,0))/100*prod_current_price' where product_id=@id and prod_name=@pname";
if (a == 0 && b == 1 && c == 1)
cmd.CommandText = "update products set prod_normal_price='prod_current_price-cast(@d as numeric(18,0))/100*prod_current_price' where product_id=@id and prod_name=@pname";
if (a == 0 && b == 1 && c == 2)
cmd.CommandText = "update products set prod_normal_price=(prod_current_price*cast(@d as numeric(18,0))/100*prod_current_price) where product_id=@id and prod_name=@pname";
if (a == 0 && b == 1 && c == 3)
cmd.CommandText = "update products set prod_normal_price=(prod_current_price/(cast(@d as numeric(18,0))/100*prod_current_price)) where product_id=@id and prod_name=@pname";
if (a == 1 && b == 1 && c == 0)
cmd.CommandText = "update products set prod_current_price=(prod_current_price+cast(@d as numeric(18,0))/100*prod_current_price) where product_id=@id and prod_name=@pname";
if (a == 1 && b == 1 && c == 1)
cmd.CommandText = "update products set prod_current_price=(prod_current_price-cast(@d as numeric(18,0))/100*prod_current_price) where product_id=@id and prod_name=@pname";
if (a == 1 && b == 1 && c == 2)
cmd.CommandText = "update products set prod_current_price=(prod_current_price*cast(@d as numeric(18,0))/100*prod_current_price) where product_id=@id and prod_name=@pname";
if (a == 1 && b == 1 && c == 3)
cmd.CommandText = "update products set prod_current_price=(prod_current_price/cast(@d as numeric(18,0))/100*prod_current_price) where product_id=@id and prod_name=@pname";
SqlParameter pid = new SqlParameter("@id",ppid);
SqlParameter pname = new SqlParameter("@pname",ppname);
SqlParameter pd = new SqlParameter("@d",d);
cmd.Parameters.Add(pid);
cmd.Parameters.Add(pname);
cmd.Parameters.Add(pd);
cmd.ExecuteNonQuery();
cnn.Close();
}
}
```

the prod_normal_price and prod_current_types both are of type numric(18,0) in my sql db