类型varchar值= 770214566.000000000的算术溢出错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类型varchar值= 770214566.000000000的算术溢出错误相关的知识,希望对你有一定的参考价值。

我有一个dtatgridview,其中数据从excel表中分配,一个按钮将dtatgridview中的行插入到sql server表中,当我单击插入按钮并在我的问题标题中声明的值770214566之后发生错误时发生错误是用户的移动号码,其数据类型是我表中的char(9),这是我的插入按钮的代码:

private void addCarsSaveBtn_Click(object sender, EventArgs e)
{
    try
    {
        for (int i = 0; i < addCarsDgv.Rows.Count - 1; i++)
        {
            SqlCommand cmd = new SqlCommand("insert into cars(Id,name,carType,stickerNo,plotNo,carPath,mobile,whats) values (@id,@name,@type,@sticker,@plot,@path,@mobile,@whats)", cn);
            cmd.Parameters.AddWithValue("@id", id + i);
            cmd.Parameters.AddWithValue("@sticker", Convert.ToInt32(addCarsDgv.Rows[i].Cells[0].Value));
            cmd.Parameters.AddWithValue("@name", addCarsDgv.Rows[i].Cells[1].Value);
            cmd.Parameters.AddWithValue("@mobile", addCarsDgv.Rows[i].Cells[2].Value);
            cmd.Parameters.AddWithValue("@whats", addCarsDgv.Rows[i].Cells[3].Value);
            cmd.Parameters.AddWithValue("@type", addCarsDgv.Rows[i].Cells[4].Value);
            cmd.Parameters.AddWithValue("@plot", addCarsDgv.Rows[i].Cells[5].Value);
            cmd.Parameters.AddWithValue("@path", addCarsDgv.Rows[i].Cells[6].Value);

            cmd.ExecuteNonQuery();
        }
        MessageBox.Show("All Done!");
    }
    catch (SqlException ex)
    {
        MessageBox.Show(ex.Message);
    }
}
答案

在大多数情况下,AddWithValue将正确解释您的意图。但是,在这种情况下,如果没有这样的话,你可以随时通过以下方式给予帮助:

  • 转换数据类型以强制匹配上下文。在你的例子中,一个简单的.ToString()可能会做到这一点......然后如果那些小数确实存在,我可以看到另一个错误。你可以说,这不是防弹的。这可能失败的另一个例子是时间戳和日期如何转换为C#DateTime数据类型
  • 明确参数的数据类型。除非你做了一些非理性的事情(比如将一个字符放入数字字段),否则会导致错误,这应该是防弹的

以下是如何实现选项#2的示例:

cmd.Parameters.AddWithValue("@mobile", addCarsDgv.Rows[i].Cells[2].Value);
cmd.Parameters[3].SqlDbType = SqlDbType.Char;

这可能不言而喻,但“[3]”是因为它是第四个参数。

或者,正如其他人所建议的那样,不要使用AddWithValue

以上是关于类型varchar值= 770214566.000000000的算术溢出错误的主要内容,如果未能解决你的问题,请参考以下文章

将 varchar 值“%”转换为数据类型 int 时转换失败

在将 varchar 值 '借阅次数' 转换成数据类型 int 时失败

在将 varchar 值 'xiaoming' 转换成数据类型 int 时失败。

将varchar值'N'转换为数据类型smallint时,转换失败。

如何解决“将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”错误

将 varchar 数据类型转换为 datetime 数据类型导致 SQL 查询中的值超出范围