Передача значения DateTime в качестве параметра в OleDbCommand - PullRequest
1 голос
/ 01 июля 2011

У меня проблема с передачей значения DateTime в запрос в виде DbParameter. Кажется, временная часть значения DateTime удаляется.

Вот пример кода на C #:

DbProviderFactory _factory = OleDbFactory.Instance;

DbCommand cmd = _factory.CreateCommand();
cmd.CommandText = "INSERT INTO SomeTable (SomeDateField) VALUES (?)";

DbParameter p = _factory.CreateParameter();
p.ParameterName = ""; // Not necessary
p.Value = DateTime.Now; // assume Time != 00:00:00
p.DbType = DbType.Date; // DateTime and DateTime2 don't work

cmd.Parameters.Add(p);

Моя проблема в том, что параметр Date, похоже, не достигает Access с его временной частью, а SomeDateField всегда имеет 00:00:00 как время.

Я не хочу делать что-то вроде:

cmd.CommandText = "INSERT INTO SomeTable (SomeDateField) VALUES (#" + aDateTimeString + "#)";

Ответы [ 3 ]

0 голосов
/ 01 июля 2011

Когда вы используете OleDbType.DateTime вместо DbType.Date, я уверен, что это будет работать.

Но, как я понимаю из вашего поста, вы не хотите быть таким конкретным и использовать более общее перечисление DbType (и классы)?

Однако я думаю, что вы должны использовать более специфичные классы OleDb на вашем уровне доступа к данным. Использование менее определенных классов 'DbType' бесполезно, потому что, когда вы нацеливаетесь на другой тип базы данных, велики шансы, что ваш SQL-синтаксис также придется изменить, поскольку каждая СУБД использует свой собственный диалект иногда только незначительные изменения, но все же ...).

0 голосов
/ 18 мая 2013

OleDbType не имеет перечисления DateTime http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbtype.aspx

Если вы используете DBType.DateTime, «Тип параметра специфичен для провайдера данных .NET Framework. Указание типа преобразует значениеПараметр для провайдера данных Тип перед передачей значения в источник данных. Если тип не указан, ADO.NET определяет тип провайдера данных для параметра из свойства Value объекта Parameter. "http://msdn.microsoft.com/en-us/library/system.data.dbtype.aspx

0 голосов
/ 01 июля 2011

Убедитесь, что ваш тип данных для SomeDateField равен DateTime, а не Date. Также попробуйте сделать

p.DbType = DbType.DateTime;
...