错误 sql:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围

Posted

技术标签:

【中文标题】错误 sql:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围【英文标题】:Error sql:The conversion of a varchar data type to a datetime data type resulted in an out-of-range value 【发布时间】:2014-07-06 11:55:04 【问题描述】:

我尝试使用以下代码输入当天的日期:

string now = (DateTime.Today.Day + "/" + DateTime.Today.Month + "/" + DateTime.Today.Year).ToString();
string tm = (DateTime.Today.Hour + ":" + DateTime.Today.Minute).ToString();
string sql2 = string.Format("INSERT INTO Kabala2 (Nu_kabala,Ma_num,Sk,Seif_hacnasa,Seif_name,Date) VALUES('0','1','2','3','4','5')", n, Session["Ma_num"], lprice, lkod,des, now );
Dal.DoQuery(sql2);

当我运行此代码时,它会显示标题中的错误:

导致将 varchar 数据类型转换为 datetime 数据类型 在一个超出范围的值

我该如何解决?

-----------------编辑

我将其更改为:string now = DateTime.Today.ToString("yyyy-MM-dd HH:mm:ss"); 并且可以正常工作。

现在我遇到了另一个问题,当我运行下面的代码时,它显示错误:将数据类型 varchar 转换为数字时出错。

string now = DateTime.Today.ToString("yyyy-MM-dd HH:mm:ss");
    string tm = DateTime.Now.ToString("HH:mm:ss");
    string sql = string.Format("INSERT INTO Kabala1 (Nu_kabala,Ma_num,Date,Time,Total,Status,Name,User_n) VALUES('0','1','2','3','4','5','6','7')", n, Session["Ma_num"], now, tm, lprice, "ddffs", Session["user"], "ddffs");
    Dal.DoQuery(sql);
    string sql2 = string.Format("INSERT INTO Kabala2 (Nu_kabala,Ma_num,Sk,Seif_hacnasa,Seif_name,Date) VALUES('0','1','2','3','4','5')", n, Session["Ma_num"], lprice, lkod, des, now);
    Dal.DoQuery(sql2);
    string sql3 = string.Format("INSERT INTO Kabala3 ((Nu_kabala,Msd,Ma_num,Kind_pay,Name_pay,Date_pay,Sk,Ms_sek,Snif,Bank,Date_klita,Seif) VALUES('0','1','2','3','4','5','6','7','8','9','10','11')", n,"1", Session["Ma_num"],"13", "ddffds", now, lprice, this.card.Text, this.mm.Text, this.yy.Text, now, lkod);
    Dal.DoQuery(sql3);

【问题讨论】:

看起来你的 tm 字符串没用,因为你没有使用它们。当您调试代码时,您的sql2 究竟是什么样的? 我在字符串 sql2 的末尾使用 'now' 【参考方案1】:

只需更改计算机或圈中的日期设置即可。我希望你知道它是怎么做的! 如果你不...

    从右下角选择您的日历。 然后选择change date and time settings 然后选择change date and time 然后选择change calendar settings 然后以日期格式> 将短日期更改为MM/dd/yyyydd/MM/yyyy。选择适合您计算机的。对我来说是MM/dd/yyyy

【讨论】:

【参考方案2】:

你可以使用DateTime.Today.ToString("yyyy-MM-dd HH:mm:ss") //任何格式...

或使用直接 sql 而不是使用 CONVERT 方法。语法是

在您的情况下,请使用 103 格式的日期

CONVERT(VARCHAR,DateTime.Today.Day + "/" + DateTime.Today.Month + "/" + DateTime.Today.Year,103)

和 108 的时间

CONVERT(VARCHAR, DateTime.Today.Hour + ":" + DateTime.Today.Minute + ":00" ,108)

应该给出 hh:mm:ss 的格式

来自以下 w3 链接的完整参考: http://www.w3schools.com/sql/func_convert.asp

【讨论】:

【参考方案3】:

mysql 中日期的标准格式是 YYYY-MM-DD。我建议使用这种格式。也许这会以正确的格式创建字符串:

string now = (DateTime.Today.Year + "-" + DateTime.Today.Month + "-" + DateTime.Today.Year).ToString();

【讨论】:

以上是关于错误 sql:将 varchar 数据类型转换为 datetime 数据类型导致值超出范围的主要内容,如果未能解决你的问题,请参考以下文章

SQL 默默地将 int 转换为 varchar,但在遇到 varchar 时会抛出错误?

SQL数据类型转换

SQL 将expression 转换为数据类型 datetime 时出现算术溢出错误

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

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

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围的问题