C# 将DateTime插入SQL DateTime
我正在尝试使用insert into语法将C# 将DateTime插入SQL DateTime,c#,sql,sql-server,datetime,C#,Sql,Sql Server,Datetime,我正在尝试使用insert into语法将DateTime插入类型为DateTime2(7)的SQL Server表列中 我收到的错误是: “System.Data.SqlClient.SqlException”类型的未处理异常 发生在System.Data.dll中 其他信息:转换日期和/或时转换失败 来自字符串的时间 我使用以下命令初始化DateTime变量: DateTime TaskCreatedDate = DateTime.Now; 在这里使用它: insertTaskCmd.Pa
DateTime
插入类型为DateTime2(7)
的SQL Server表列中
我收到的错误是:
“System.Data.SqlClient.SqlException”类型的未处理异常
发生在System.Data.dll中
其他信息:转换日期和/或时转换失败
来自字符串的时间
我使用以下命令初始化DateTime
变量:
DateTime TaskCreatedDate = DateTime.Now;
在这里使用它:
insertTaskCmd.Parameters.AddWithValue("@TaskCreatedDate", TaskCreatedDate);
有什么想法吗
更新:
我试过:
insertTaskCmd.Parameters.Add("@TaskCreatedDate", SqlDbType.DateTime2).Value = TaskCreatedDate;
产生相同的错误
完整查询:
string insertTask = String.Format("INSERT INTO [Tasks] VALUES (@TaskNumber, '@TaskCreatedDate', '', '', '', @Status, '3', '')");
SqlCommand insertTaskCmd = new SqlCommand(insertTask, conn);
insertTaskCmd.Parameters.AddWithValue("@TaskNumber", newTaskNumbers[i]);
insertTaskCmd.Parameters.Add("@TaskCreatedDate", SqlDbType.DateTime2).Value = TaskCreatedDate.ToString("yyyy-MM-dd HH:mm:ss");
insertTaskCmd.Parameters.AddWithValue("@Status", 0); // 0 is Active
insertTaskCmd.ExecuteNonQuery();
固定的
注意@TaskCreatedDate周围有单引号(')。删除这些,问题就解决了。我认为您的插入查询是错误的-您的
@TaskCreatedDate
在单引号中-这不应该
试试这个:
string insertTask = "INSERT INTO [Tasks] VALUES (@TaskNumber, @TaskCreatedDate, '', '', '', @Status, '3', '')";
SqlCommand insertTaskCmd = new SqlCommand(insertTask, conn);
insertTaskCmd.Parameters.Add("@TaskNumber", SqlDbType.Int).Value = newTaskNumbers[i];
insertTaskCmd.Parameters.Add("@TaskCreatedDate", SqlDbType.DateTime2).Value = TaskCreatedDate;
insertTaskCmd.Parameters.Add("@Status", SqlDbType.Int).Value = 0; // 0 is Active
insertTaskCmd.ExecuteNonQuery();
注意:我还建议明确指定要插入的列:
string insertTask = @"INSERT INTO [Tasks](TaskNumber, TaskCreatedDate, .., .., .., Status, .. ..)
VALUES (@TaskNumber, @TaskCreatedDate, '', '', '', @Status, '3', '')");
您应该签出并停止使用
.AddWithValue()
-这可能会导致意外的结果…用AddWithValue
替代Parameters.Add是Parameters.Add(新的SqlParameter(@paramName),SqlDbType.where,columnSize){Value=valueVariable};
。当您总是为字符列指定相同的大小时,您将只生成一个执行计划。当您省略它时,对于查询中使用的每个参数-值-长度组合,您将以一个计划结束。您应该告诉我们TaskCreatedDate
的实际数据类型是DateTime还是Timestamp,以及是否为DateTime不是Datetime,请尝试将其设为一个。这也是输入错误吗insertTaskCmd.Parameters.Add(“@TaskCreatedDate”,SqlDbType.DateTime2).Value
日期时间2
请显示存储的过程或查询以及与字段数据类型相关的表架构。这将有助于消除我们的任何猜测工作。您需要删除所有引用的文本并开始使用/学习如何使用参数..以及调试器..resp壮观地speaking@MethodMan:这似乎是不必要的。OP确实使用参数。一些插入的值恰好是常量,因此需要使用引号。@AndriyM可能您在OP的原始问题“@TaskCreatedDate”中遗漏了这一部分。