.NETC#/SQL Server从 varchar 数据类型到 smalldatetime 数据类型的转换产生一个超出范围的值

封念 2020-03-23 10:26:26
直接上代码,告诉我哪错了就好了。
//这个是判断成功有会员,进行时间叠加一个月。
bool RenewVip = true;
DateTime paydatetime = UserData.userVipDataTiam;
UserData.userMoney = UserData.userMoney - 9;
//插入充值记录
UserInfoManager.updatePaytime(UserData.userId, 3, Nine_9,Convert.ToString(paydatetime), 2, result);
//到期时间叠加一个月
paydatetime = paydatetime.AddMonths(1);
UserInfoManager.updateVip( UserData.userId, paydatetime);
MessageBox.Show("充值成功", "充值提示", MessageBoxButtons.OK);

//充值叠加会员时间
public static bool updateVip(int userId, DateTime userVipExpTime)
{
string sql = string.Format("Update userVipTime set userVipExpTime='{0}' where userId='{1}'",userVipExpTime,userId);
int rowCount = (int)DBHelper.ExecuteUpdate(sql);
if (rowCount == 1 )
{
return true;
}
else
{
return false;
}


...全文
945 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiangqing 2020-03-25
  • 打赏
  • 举报
回复
看一下是否超出了范围
封念 2020-03-24
  • 打赏
  • 举报
回复
引用 11 楼 大西瓜一块五一斤♏ 的回复:
你把楼上的改成userVipExpTime.ToString("yyyy-MM-dd hh:mm")再试试
还是没效果,没有AddMonths(1)就不会报错,有了就报错
封念 2020-03-24
  • 打赏
  • 举报
回复
引用 12 楼 xinbada1985 的回复:
首先你是执行insert报错了!你看看userPayCiontime的paytime是什么类型,把paydatetima转成datetime类型看看是不是就好了!
改了datetime类型还是一样
xinbada1985 2020-03-24
  • 打赏
  • 举报
回复
首先你是执行insert报错了!你看看userPayCiontime的paytime是什么类型,把paydatetima转成datetime类型看看是不是就好了!
  • 打赏
  • 举报
回复
你把楼上的改成userVipExpTime.ToString("yyyy-MM-dd hh:mm")再试试
  • 打赏
  • 举报
回复
smalldatetime只能精确到分钟,而datatime可以精确到3%秒(3.33毫秒)。
  • 打赏
  • 举报
回复
你表里datetime类型是后面改的?如果是之前也不会报smalldatetime这个错吧。。。 datetime范围1753 年 1 月 1 日到 9999 年 12 月 31 日 smalldatetime范围1900 年 1 月 1 日到 2079 年 6 月 6 日
封念 2020-03-24
  • 打赏
  • 举报
回复
引用 5 楼 正怒月神 的回复:
[quote=引用 4 楼 Min_Feng 的回复:] [quote=引用 3 楼 会一点的菜鸟程序员 的回复:] 看你数据库的userVipExpTime这个字段是什么类型的
Datetime类型[/quote] 那就直接
string sql = string.Format("Update userVipTime set userVipExpTime='{0}' where userId='{1}'",userVipExpTime.ToString("yyyy-MM-dd hh:mm:ss"),userId);
[/quote] 还是报那种错误。
封念 2020-03-24
  • 打赏
  • 举报
回复
引用 6 楼 会一点的菜鸟程序员 的回复:
是不是因为你传进去的值 不对呀 你最好自己调试一下
我在数据库测试了是对的
封念 2020-03-24
  • 打赏
  • 举报
回复
总结一下,, 凡是做的后面的,先看看前面查询做了没有。。。
xinbada1985 2020-03-24
  • 打赏
  • 举报
回复
你看看是paydatetime.AddMonths(1)直接变成0001/2/1/00:00:00还是赋给paydatetime后变了
xinbada1985 2020-03-24
  • 打赏
  • 举报
回复
paydatetime = paydatetime.AddMonths(1);应该是这个写法问题!你别把 paydatetime.AddMonths(1);赋给paydatetime,换一个变量看看还是不是0001/2/1/00:00:00
  • 打赏
  • 举报
回复
引用 16 楼 Min_Feng 的回复:
[quote=引用 15 楼 大西瓜一块五一斤♏ 的回复:] [quote=引用 14 楼 Min_Feng 的回复:] [quote=引用 11 楼 大西瓜一块五一斤♏ 的回复:] 你把楼上的改成userVipExpTime.ToString("yyyy-MM-dd hh:mm")再试试
还是没效果,没有AddMonths(1)就不会报错,有了就报错[/quote] 断点看看你的paydatetime = paydatetime.AddMonths(1);加了一个月值是多少?[/quote] 变成了0001/2/1/00:00:00了。。。[/quote] 都不是字段值范围内,肯定报错啊
封念 2020-03-24
  • 打赏
  • 举报
回复
引用 15 楼 大西瓜一块五一斤♏ 的回复:
[quote=引用 14 楼 Min_Feng 的回复:] [quote=引用 11 楼 大西瓜一块五一斤♏ 的回复:] 你把楼上的改成userVipExpTime.ToString("yyyy-MM-dd hh:mm")再试试
还是没效果,没有AddMonths(1)就不会报错,有了就报错[/quote] 断点看看你的paydatetime = paydatetime.AddMonths(1);加了一个月值是多少?[/quote] 变成了0001/2/1/00:00:00了。。。
  • 打赏
  • 举报
回复
引用 14 楼 Min_Feng 的回复:
[quote=引用 11 楼 大西瓜一块五一斤♏ 的回复:] 你把楼上的改成userVipExpTime.ToString("yyyy-MM-dd hh:mm")再试试
还是没效果,没有AddMonths(1)就不会报错,有了就报错[/quote] 断点看看你的paydatetime = paydatetime.AddMonths(1);加了一个月值是多少?
正怒月神 2020-03-23
  • 打赏
  • 举报
回复
string sql = string.Format("Update userVipTime set userVipExpTime='{0}' where userId='{1}'",userVipExpTime,userId); userVipExpTime不用单引号
前端民工仔 2020-03-23
  • 打赏
  • 举报
回复
是不是因为你传进去的值 不对呀 你最好自己调试一下
正怒月神 2020-03-23
  • 打赏
  • 举报
回复
引用 4 楼 Min_Feng 的回复:
[quote=引用 3 楼 会一点的菜鸟程序员 的回复:] 看你数据库的userVipExpTime这个字段是什么类型的
Datetime类型[/quote] 那就直接
string sql = string.Format("Update userVipTime set userVipExpTime='{0}' where userId='{1}'",userVipExpTime.ToString("yyyy-MM-dd hh:mm:ss"),userId);
封念 2020-03-23
  • 打赏
  • 举报
回复
引用 3 楼 会一点的菜鸟程序员 的回复:
看你数据库的userVipExpTime这个字段是什么类型的
Datetime类型
前端民工仔 2020-03-23
  • 打赏
  • 举报
回复
看你数据库的userVipExpTime这个字段是什么类型的
加载更多回复(1)

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧