Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se describen las conversiones de fecha y hora realizadas entre SQL Server 2008 (o posterior) y una aplicación cliente escrita con OLE DB de SQL Server Native Client.
Conversiones
En la tabla siguiente se describen las conversiones entre el tipo devuelto al cliente y el tipo del enlace. En el caso de los parámetros de salida, si se ha llamado a ICommandWithParameters::SetParameterInfo y el tipo especificado en pwszDataSourceType no coincide con el tipo real en el servidor, el servidor realizará una conversión implícita y el tipo devuelto al cliente coincidirá con el tipo especificado a través de ICommandWithParameters::SetParameterInfo. Esto puede provocar resultados de conversión inesperados cuando las reglas de conversión del servidor son diferentes de las descritas en este tema. Por ejemplo, cuando se debe proporcionar una fecha predeterminada, SQL Server usa 1900-1-1 en lugar de 1899-12-30.
| Para-> Desde |
FECHA | DBDATE | DBTIME | DBTIME2 | DBTIMESTAMP | DBTIMESTAMPOFFSET | FILETIME | BYTES | VARIANTE | SSVARIANT | BSTR | STR | WSTR |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Fecha | 1,7 | De acuerdo | - | - | 1 | 1,3 | 1,7 | - | Aceptar (VT_BSTR) | De acuerdo | De acuerdo | 4 | 4 |
| Tiempo | 5,6,7 | - | 9 | De acuerdo | 6 | 3,6 | 5,6 | - | Aceptar (VT_BSTR) | De acuerdo | De acuerdo | 4 | 4 |
| Smalldatetime | 7 | 8 | 9,10 | 10 | De acuerdo | 3 | 7 | - | 7 (VT_DATE) | De acuerdo | De acuerdo | 4 | 4 |
| Fecha y hora | 5,7 | 8 | 9,10 | 10 | De acuerdo | 3 | 7 | - | 7 (VT_DATE) | De acuerdo | De acuerdo | 4 | 4 |
| Datetime2 | 5,7 | 8 | 9,10 | 10 | 7 | 3 | 5,7 | - | Aceptar (VT_BSTR) | De acuerdo | De acuerdo | 4 | 4 |
| Datetimeoffset | 5,7,11 | 8,11 | 9,10,11 | 10,11 | 7,11 | De acuerdo | 5,7,11 | - | Aceptar (VT_BSTR) | De acuerdo | De acuerdo | 4 | 4 |
| Char, Varchar, Nchar, Nvarchar |
7, 13 | 12 | 12,9 | 12 | 12 | 12 | 7,13 | No disponible | No disponible | No disponible | No disponible | No disponible | No disponible |
| Sql_variant (datetime) |
7 | 8 | 9,10 | 10 | De acuerdo | 3 | 7 | - | 7(VT_DATE) | De acuerdo | De acuerdo | 4 | 4 |
| Sql_variant (smalldatetime) |
7 | 8 | 9,10 | 10 | De acuerdo | 3 | 7 | - | 7(VT_DATE) | De acuerdo | De acuerdo | 4 | 4 |
| Sql_variant (fecha) |
1,7 | De acuerdo | 2 | 2 | 1 | 1,3 | 1,7 | - | OK(VT_BSTR) | De acuerdo | De acuerdo | 4 | 4 |
| Sql_variant (hora) |
5,6,7 | 2 | 6 | De acuerdo | 6 | 3,6 | 5,6 | - | OK(VT_BSTR) | De acuerdo | De acuerdo | 4 | 4 |
| Sql_variant (datetime2) |
5,7 | 8 | 9,10 | 10 | De acuerdo | 3 | 5,7 | - | OK(VT_BSTR) | De acuerdo | De acuerdo | 4 | 4 |
| Sql_variant (datetimeoffset) |
5,7,11 | 8,11 | 9,10,11 | 10,11 | 7,11 | De acuerdo | 5,7,11 | - | OK(VT_BSTR) | De acuerdo | De acuerdo | 4 | 4 |
Clave de los símbolos
| Símbolo | Significado |
|---|---|
| De acuerdo | No es necesario realizar ninguna conversión. |
| - | No se admite la conversión. Si el enlace se valida cuando se llama a IAccessor::CreateAccessor, se devuelve DBBINDSTATUS_UPSUPPORTEDCONVERSION en rgStatus. Cuando se aplaza la validación del descriptor de acceso, se establece DBSTATUS_E_BADACCESSOR. |
| 1 | Los campos de hora se establecen en cero. |
| 2 | DBSTATUS_E_CANTCONVERTVALUE se establece. |
| 3 | La zona horaria se establece en cero. |
| 4 | Si el búfer de cliente no es lo suficientemente grande, se establece DBSTATUS_S_TRUNCATED. Cuando el tipo de servidor incluye fracciones de segundos, el número de dígitos de la cadena de resultado coincide exactamente con la escala del tipo de servidor. |
| 5 | Se omite el truncamiento de segundos o fracciones de segundo. |
| 6 | La fecha se establece en la fecha actual, a menos que el origen sea un literal de tiempo de cadena y el destino se DBTYPE_DATE. En este caso, se usa 1899-12-30. |
| 7 | Si el valor se desborda, se establece DBSTATUS_E_DATAOVERFLOW. |
| 8 | Los campos de hora se omiten. |
| 9 | Se omiten los campos fraccionarios de segundos. |
| 10 | Se omite el componente de fecha. |
| 11 | La hora se convierte en la zona horaria del cliente. Si se produce un error durante esta DBSTATUS_E_DATAOVERFLOW de conversión se establece. |
| 12 | La cadena se analiza como literal ISO y se convierte en el tipo de destino. Si se produce un error, la cadena se analiza como un literal de fecha OLE (que también tiene componentes de hora) y se convierte de una fecha OLE (DBTYPE_DATE) al tipo de destino. La cadena debe cumplir la sintaxis de los literales del tipo de destino permitidos para que el análisis de formato ISO se realice correctamente. Para que el análisis OLE se realice correctamente, la cadena debe ajustarse a la sintaxis reconocida por OLE. Si no se puede analizar la cadena, se establece DBSTATUS_E_CANTCONVERTVALUE. Si algún valor de componente está fuera del intervalo, se establece DBSTATUS_E_DATAOVERFLOW. |
| 13 | La cadena se analiza como literal ISO y se convierte en el tipo de destino. Si se produce un error, la cadena se analiza como un literal de fecha OLE (que también tiene componentes de hora) y se convierte de una fecha OLE (DBTYPE_DATE) al tipo de destino. La cadena debe cumplir la sintaxis de los literales datetime, a menos que el destino sea DBTYPE_DATE o DBTYPE_DBTIMESTAMP. Si este es el caso, se permite un literal de fecha y hora para que el análisis de formato ISO se realice correctamente. Para que el análisis OLE se realice correctamente, la cadena debe ajustarse a la sintaxis reconocida por OLE. Si no se puede analizar la cadena, se establece DBSTATUS_E_CANTCONVERTVALUE. Si algún valor de componente está fuera del intervalo, se establece DBSTATUS_E_DATAOVERFLOW. |