Asp.net 将数据类型nvarchar转换为int t时出错

Asp.net 将数据类型nvarchar转换为int t时出错,asp.net,sql,Asp.net,Sql,下面是我的SQL存储过程代码。请注意这是一个购物网站。当我运送产品并对小计给予折扣(比如2467-5%=2345.65是返回的值),然后单击“继续付款”时,我得到以下错误:将数据类型nvarchar转换为int时出错 Line 211: int result = _com.ExecuteNonQuery(); 这是我的密码: create proc [dbo].[usp_ins_and_update_other_cart_details] @Guestid varchar(max),

下面是我的SQL存储过程代码。请注意这是一个购物网站。当我运送产品并对小计给予折扣(比如2467-5%=2345.65是返回的值),然后单击“继续付款”时,我得到以下错误:
将数据类型nvarchar转换为int时出错

Line 211: int result = _com.ExecuteNonQuery(); 
这是我的密码:

create proc [dbo].[usp_ins_and_update_other_cart_details]
    @Guestid varchar(max),
    @DisAmount int,
    @ShipAmount  int,
    @SubTotal int,
    @GrandAmount int
    as 
begin
    if not exists(select Guestid FROM DiscountAndShippingdetails WHERE Guestid =@Guestid)
    begin
        insert into DiscountAndShippingdetails 
              ( Guestid, DisAmount, ShipAmount, SubTotal, GrandAmount ) 
        values(@Guestid,@DisAmount,@ShipAmount,@SubTotal,@GrandAmount);
    end
    else
    begin
        update DiscountAndShippingdetails 
           set DisAmount   = @DisAmount
             , ShipAmount  = @ShipAmount
             , SubTotal    = @SubTotal
             , GrandAmount = @GrandAmount 
         where Guestid     = @Guestid;
    end
end

首先,您需要检查字符串是否为空或null 然后将其转换为整数

如果要将nvarchar从c#asp.net转换为整数,请使用以下命令:

转换为32(您的字符串值)

如果从sql查询执行此操作 遵循以下步骤:

强制转换(您的值为INT)

=============== 当你修改你的帖子时。 首先检查存储过程是否返回int/string 然后写


int result=Convert.ToInt32(executequery())

主要错误只有一个,您将数据类型声明为一,并将数据作为其他类型发送。请参阅,您已将所有列声明为int,但将值作为字符串发送。这是你奋斗的主要原因。请按照以下几行进行下一步操作

像这样更改您的声明

int subtotal = Convert.ToInt32( Math.Round(Convert.Todouble(lblsubtotal.Text)));
int discount = Convert.ToInt32(Math.Round(Convert.Todouble(lbldiscount.Text))); 
int shipping = Convert.ToInt32(Math.Round(Convert.Todouble(lblScharg.Text))); 
int gradtotal =Convert.ToInt32( Math.Round(Convert.Todouble(lblGrandTotal.Text))); 
int ret= insertOtherdetails(guiid, discount, shipping, subtotal, gradtotal); 
if (ret != 0) 
{ 
   Response.Redirect("~/Checkout.aspx");
} 

并将函数定义更改为,insertOtherdetails(string,int,int,int,int)

您还必须发布SQL查询。这是什么?。你必须表现出你的努力。这里我们不知道您为nvarchar和int分配了什么。甚至我们也不知道如何从您的问题开始?问题不在这里。问题出在您的SQL查询中。在单引号中包含varchar和nvarchar数据。2345.65是小计还是总计?。如果是这样,那么您的程序可能是错误的。您必须更改数据类型,否则您必须将值转换为int,然后尝试插入数据库。在给予折扣2345.65是大额后,我尝试将此值四舍五入,就像2345.65是2346一样。是否有任何方法将此十进制值四舍五入请帮助请查看上面的内容您需要添加一个输出参数“@ClientID INT-OUTPUT”然后在插入/更新操作后设置参数:SELECT@ClientID=SCOPE\u IDENTITY()我还是不明白你的意思brijesh有没有办法接受或拒绝接受十进制值string subtotal=lblsubtotal.Text.ToString();string discount=lbldiscont.Text.ToString();string shipping=lblScharg.Text.ToString();string gradtotal=lblgrandtall.Text.ToString();int ret=insertOtherdetails(guiid、折扣、shipping、小计、gradtotal);if(ret!=0){Response.Redirect(~/Checkout.aspx”);}grand total是一个名为gradtotal的asp标签我们有四个标签小计、折扣、发货、gradtotal亲爱的,现在我收到了以下编译器错误消息:CS1502:与“Cart.insertOtherdetails”匹配的最佳重载方法(string、string、string、string、string)'有一些无效参数源错误:第384行:int shipping=Convert.ToInt32(lblScharg.Text);第385行:int gradtotal=Convert.ToInt32(lblGrandTotal.Text);第386行:int ret=insertOtherdetails(guiid、折扣、配送、小计、gradtotal);第387行:if(ret!=0)第388行:{同时更改函数定义。如果在编码部分insertOtherdetails(string,string,string,string,string,string,string)中发现类似的内容,请像这样更改insertOtherdetails(int,int,int,int,int,int)与“Cart.insertOtherdetails(int,int,int,int,int,int)最匹配的重载方法'具有一些无效参数源错误:第386行:int-ret=insertOtherdetails(GUID、折扣、配送、小计、gradtotal);私有字符串折扣(双重费率){return(double.Parse(lblsubtotal.Text.ToString().Trim())*(rate/100)).ToString();}有没有办法把这个双计数十进制值改为四舍五入