数据库中 值的大小需要 于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM这个之间
而datetime 默认值是 0001/01/01 不位于数据库中的值的要求,所以会报上面的错误
判断datetime类型的值是否为空 ,不能用 IsNullOrEmpty而应该用default(DateTime) 比对是否为空。。
sqlserver 默认是插入1900-01-01
public DateTime StartTime { get; set; }=Convert.ToDateTime("1900-01-01");
C#日期格式化4、用Convert方法转换日期显示格式:
Convert.ToDateTime("2005-8-23").ToString
("yyMMdd",System.Globalization.DateTimeFormatInfo.InvariantInfo); //支持繁体数据库
C#日期格式化5、直接用ToString方法转换日期显示格式:
|
C#日期格式化6、只显示年月 :
DateTime.Now.ToString("yyyyMMddhhmmss");
DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss")
using Dapper;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsForms_WebServiceClient
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
TaskInfo task = new TaskInfo();
task.TaskNo = DateTime.Now.Ticks.ToString() + "1";
task.TaskType = 1;
task.StartPoint = 32;
task.EndPoint = 109;
task.MaterialType = MaterialType.托盘;
task.StartTime = DateTime.Now;
string taskStr = JsonConvert.SerializeObject(task);
CreateTask_NG(taskStr);
}
ResultInfo resultInfo = new ResultInfo();
public ResultInfo CreateTask_NG(string task)
{
try
{
TaskInfo taskInfo = JsonConvert.DeserializeObject<TaskInfo>(task);
//string sql = "INSERT INTO [Task_Info_SaiMo] (TaskNo,TaskType,StartPoint,EndPoint,MaterialType,StartTime) Values (@TaskNo,@TaskType,@StartPoint,@EndPoint,@MaterialType,@StartTime)";
string sql = "task_insert";
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString))
{
var affectedRows = connection.Execute(sql, new { TaskNo = taskInfo.TaskNo, TaskType = taskInfo.TaskType, StartPoint = taskInfo.StartPoint, EndPoint = taskInfo.EndPoint, MaterialType = taskInfo.MaterialType, StartTime = taskInfo.StartTime }
,commandType: CommandType.StoredProcedure);
if (affectedRows > 0)
{
resultInfo.Result = true;
resultInfo.Message = "任务添加成功";
}
else
{
resultInfo.Result = false;
resultInfo.Message = "任务添加失败";
}
// var customer = connection.Query<Customer>("Select * FROM CUSTOMERS WHERE CustomerName = 'Mark'").ToList();
}
return resultInfo;
}
catch (Exception)
{
throw;
}
}
}
}
被误导的原因分析
1.当时一直被要给 datetime类型的变量传个最小的数据库大小的值这个误导,其实我只需要更新不为空的datetime类型,而datetime类型值都不为空,所以不能用IsNullOrEmpty,所以我要比对的是datetime否是默认值( dafault(datetime))
2. 当时插入数据的时候,都是datetime的默认值,为什么数据库没有报错,可以将null值传入,而更新时却不能
3. 更新只更新给定的字段