C# 将DateTime插入SQL DateTime

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

我正在尝试使用insert into语法将
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”中遗漏了这一部分。