【问题标题】:Error converting data type nvarchar to int t将数据类型 nvarchar 转换为 int t 时出错
【发布时间】:2014-06-24 09:31:27
【问题描述】:

下面是我的 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

【问题讨论】:

  • 你也必须发布你的 SQL 查询。
  • 这是什么?你必须表现出你的努力。在这里,我们不知道您为 nvarchar 和 int 分配了什么。即使我们不知道如何从您的问题开始?
  • 问题不在这里。问题出在您的 SQL 查询中。在单引号中包含 varchar 和 nvarchar 数据。
  • 是 2345.65 SubTotal 还是 Grand Amount ?如果是这样,那么您的程序可能是错误的。您必须更改数据类型,否则您必须将值转换为 int,然后尝试插入数据库。
  • 在提供折扣后 2345.65 是大笔金额,我想像 2345.65 一样将这个值四舍五入 2346 有没有办法四舍五入这个十进制值,请帮助

标签: asp.net sql


【解决方案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)

【讨论】:

  • 字符串小计 = lblsubtotal.Text.ToString();字符串折扣 = lbldiscount.Text.ToString();字符串运输 = lblScharg.Text.ToString();字符串 gradtotal = lblGrandTotal.Text.ToString(); int ret= insertOtherdetails(guiid, discount, shipping, subtotal, gradtotal); if (ret != 0) { Response.Redirect("~/Checkout.aspx");总计是一个名为 gradtotal 的 asp lable 我们有四个标签 subtotal 、 discount 、 shipping 、 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, discount, shipping, subtotal, gradtotal);第 387 行:如果 (ret != 0) 第 388 行:{
  • 函数定义也发生了变化。如果您在编码部分找到类似的内容 insertOtherdetails(string, string, string, string, string) 那么请像这样更改 insertOtherdetails(int, int, int, int, int)
  • 'Cart.insertOtherdetails(int, int, int, int, int)' 的最佳重载方法匹配有一些无效参数源错误:第 386 行:int ret = insertOtherdetails(guiid, discount, shipping , 小计, gradtotal);
  • 私有字符串 disCount(double rate) { return (Double.Parse(lblsubtotal.Text.ToString().Trim()) * (rate / 100)).ToString(); } 而不是改变总计有没有办法改变这个折扣十进制值来四舍五入它
【解决方案2】:

首先你需要检查你的字符串不为空或为空 然后将其转换为整数。

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

convert.toint32(yourstringvalue);

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

CAST(yourvalue AS INT)

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

int 结果 = Convert.ToInt32(executequery());

【讨论】:

  • 请看上方
  • 您需要添加一个输出参数“@ClientID INT OUTPUT”,然后在插入/更新操作后设置该参数:SELECT @ClientID = SCOPE_IDENTITY()
  • 我还是不明白你的意思 brijesh 有没有办法接受或拒绝取十进制值
猜你喜欢
  • 2015-03-14
  • 2015-12-24
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多