【问题标题】:C# inserting datetime failureC#插入日期时间失败
【发布时间】:2011-07-12 21:07:17
【问题描述】:

我有一个数据库,其中有一个名为Fio_FinalSched 的表,而该表又具有一个名为FinalDate 的列,其类型为smalldatetime。我通过以下方式将日期字符串转换为DateTime 类型:

DateTime theDate = Convert.ToDateTime("2010-01-05 23:50:00");

然后我通过以下方式创建命令字符串:

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values ("+theDate+")";

然后,将其转化为 SQL 命令:

SqlCommand myCommand = new SqlCommand(testCommand,conn);

conn 是数据库连接。最后,我执行命令:

myCommand.ExecuteNonQuery();

当我运行它时,它会到达执行行,然后给我错误:

Incorrect syntax near '11'.

我尝试了多种方式更改日期字符串的格式,但均无济于事。是因为我的数据库需要smalldatetime 类型而不是datetime 类型吗? C# 似乎没有我可以使用的smalldatetime 类型。任何见解将不胜感激!

【问题讨论】:

    标签: c# datetime smalldatetime


    【解决方案1】:

    您需要使用单引号将日期括在 SQL 字符串文字中...

    string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values ('"+theDate+"')";
    

    或者使用参数..

    string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values (@myDate)";
    cmd.Parameters.Add(new SqlParameter("@myDate", theDate));
    

    【讨论】:

      【解决方案2】:

      尝试在字符串中的日期周围加上单引号...

      string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values ('"+theDate+"')";
      

      【讨论】:

        【解决方案3】:

        在数据库中使用 DateTime 类型和其他几个类型,强烈推荐使用 @Parameters 以及所有转换(如果需要),例如:时区、格式或在客户端执行的任何操作。

        还因为,正如您在帖子中所说,该列是 smalldatetime 类型而不是字符串。

        简而言之,尝试使用 @Parameters,您很可能会成功。

        问候。

        【讨论】:

          【解决方案4】:
          【解决方案5】:

          首先在日期两边加上单引号。

          例如

          ('"+theDate+"')";

          这对于 ISO 来说通常已经足够了。您可能需要研究转换器功能。

          请注意 theDate 的信息来自何处。如果它来自可编辑字段(等),那么这就是 SQL 注入攻击的候选对象。

          但是,如果你转换成dateTime,然后粘贴到一个SQL字符串中,那不就是一层编码吗?

          【讨论】:

          • 谢谢!不,我只是从我的另一个数据库中提取信息:)
          【解决方案6】:

          我建议使用命名参数:

          string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values (@MYDATE)";
          SqlCommand myCommand = new SqlCommand(testCommand,conn);
          myCommand.Parameters.Add(new SqlParameter("@MYDATE", SqlDbType.DateTime)).Value = theDate;
          myCommand.ExecuteNonQuery();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-05-23
            • 1970-01-01
            • 2021-03-22
            • 1970-01-01
            • 2016-12-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多