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

时间:2014-06-24 09:31:28

标签: asp.net sql

下面是我的SQL存储过程代码。请注意,它是一个购物网站。当我购买产品并在子总数上给予折扣(如2467 - 5%= 2345.65是返回值)然后我点击继续付款,我收到此错误:Error converting data type nvarchar to 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

2 个答案:

答案 0 :(得分:1)

主要错误只有一件事,您将数据类型声明为一个,并将您的数据发送为其他一些。请参阅已为所有列声明为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)

答案 1 :(得分:0)

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

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

convert.toint32(yourstringvalue);

如果你从sql查询执行此操作 按照这个:

CAST(yourvalue AS INT)

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

int result = Convert.ToInt32(executequery());