将DateTime插入SQL DateTime

时间:2015-03-11 16:15:26

标签: 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.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();

2 个答案:

答案 0 :(得分:3)

我认为您的插入查询是错误的 - 您的单引号中有@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();

注意:我还建议always明确指定要插入的列:

string insertTask = @"INSERT INTO [Tasks](TaskNumber, TaskCreatedDate, .., .., .., Status, .. ..)
                      VALUES (@TaskNumber, @TaskCreatedDate, '', '', '', @Status, '3', '')");

答案 1 :(得分:0)

固定。

注意@TaskCreatedDate周围有单引号(')。删除它们并解决它。