2

我有一个数据库,其中有一个名为的表,该表Fio_FinalSched又具有一个名为FinalDatesmalldatetime 的列。我通过以下方式将日期字符串转换为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我可以使用的类型。任何见解将不胜感激!

4

6 回答 6

7

您需要使用单引号将日期包装在 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));
于 2011-07-12T21:09:05.707 回答
3

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

string testCommand = "INSERT INTO Fio_FinalSched (FinalDate) Values ('"+theDate+"')";
于 2011-07-12T21:09:16.790 回答
2

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

还因为,正如您在帖子中提到的那样,该列是smalldatetime类型而不是字符串。

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

问候。

于 2011-07-12T21:10:46.680 回答
1

使用参数而不是字符串,例如SqlParameterCollection.AddWithValue方法。

于 2011-07-12T21:09:05.737 回答
1

首先在日期周围加上单引号。

例如

('"+theDate+"')";

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

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

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

于 2011-07-12T21:10:56.780 回答
1

我建议使用命名参数:

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();
于 2011-07-12T21:14:09.580 回答