无法将数据类型nvarchar转换为数字

时间:2014-02-12 17:55:30

标签: c# asp.net sql-server nvarchar

将此错误传递给txtNum.Text我不知道该怎么做我已经尝试了

Convert.ToInt32SqlDbType.Int但它不起作用请帮帮我

总计有一个$符号可能就是这个问题。 Total的DataType是十进制

com = new SqlCommand(@"INSERT INTO Orders(
                        OrderDate, 
                        Username, 
                        FirstName, 
                        LastName, 
                        Address, 
                        Phone, 
                        Total, 
                        HasBeenShipped
                    ) 
                    VALUES(
                        GetDate(),
                        @p5, 
                        @p1, 
                        @p2, 
                        @p3, 
                        @p4, 
                        @p6,
                        'false'
                    )", con2);
com.Parameters.AddWithValue("@p5", Label2.Text);
com.Parameters.AddWithValue("@p1", txtFname.Text);
com.Parameters.AddWithValue("@p2", TxtLname.Text);
com.Parameters.AddWithValue("@p3", TxtAdd.Text);
com.Parameters.AddWithValue("@p4", Convert.ToInt32(TxtNum.Text));
com.Parameters.AddWithValue("@p6", lblTotal.Text);
com.ExecuteNonQuery();

2 个答案:

答案 0 :(得分:1)

我认为最后一个字段HasBeenShipped在数据库中是一个数据类型 如果是这种情况,则传递0(数值),因为它不是'false'(字符串)

此外,参数@p6包含字段Total的值,因此该参数应转换为数字,而参数@p4可以是如果字段PhoneNVarChar

,则为字符串
com = new SqlCommand(@"INSERT INTO Orders 
             (OrderDate, Username, FirstName, LastName, Address, Phone, Total, HasBeenShipped)
       VALUES(GetDate(), @p5,      @p1,       @p2,      @p3,     @p4,   @p6,   0)", con2);
com.Parameters.AddWithValue("@p5", Label2.Text);
com.Parameters.AddWithValue("@p1", txtFname.Text);
com.Parameters.AddWithValue("@p2", TxtLname.Text);
com.Parameters.AddWithValue("@p3", TxtAdd.Text);
com.Parameters.AddWithValue("@p4", TxtNum.Text);
com.Parameters.AddWithValue("@p6", Convert.ToInt32(lblTotal.Text));

编辑按照下面的评论,如果lblTotal.Text包含货币符号,那么您无法直接转换为包含Convert.ToInt32的整数,则应使用decimal.TryParse

decimal totalValue
decimal.TryParse(lblTotal.Text, NumberStyles.Currency, 
                 CultureInfo.CurrentCulture, out totalValue);
com.Parameters.AddWithValue("@p6", totalValue);

答案 1 :(得分:1)

如果将lblTotal格式化为货币,则可以使用:

com.Parameters.AddWithValue("@p6", Decimal.Parse(lblTotal.Text,NumberStyles.Currency));

显然,如果是有效的货币值,它会抛出异常 - 你需要决定在这种情况下该做什么。