2011-03-08 15 views
10

He tomado el control de algún código C#.C#: DbType.String versus DbType.AnsiString

El código está llegando a una base de datos con algunos SQL que usa parámetros.

Todos los parámetros de cadena se escriben como DbType.AnsiString en lugar de DbType.String.

¿Por qué usaría DbType.AnsiString en lugar de DbType.String?

Respuesta

19

AnsiString
Un flujo de longitud variable de caracteres no Unicode que varía entre 1 y 8,000 caracteres.

Cadena
Un tipo que representa cadenas de caracteres Unicode.

En la base de datos:

nchar y nvarchar es Unicode

CHAR y VARCHAR es no Unicode

+0

+1. ¿Por qué alguien NOE usaría AnsiString? ¿Es una cadena ansi no unicode en la base de datos? Me elude como lógica. – TomTom

+0

¿'DbType.AnsiString' es un subconjunto de' DbType.String'? –

+0

¿Qué son los caracteres 'unicode' en este contexto? –

6

Se podría utilizar AnsiString en lugar de cuerdas para evitar conversiones implícitas en su base de datos SQL Server.

es decir, cuando pasa una variable de cadena a MSSQL aparece como nvarchar (max). Dado el hecho de que una base de datos bien diseñada puede usar varcharrs en lugar de nvarchars por defecto (a menos que exista un requisito comercial para conjuntos de caracteres no latinos).

Una variable de cadena en este caso causará una conversión implícita en la base de datos. Esto puede hacer que el motor no pueda usar ciertos índices y realizar escaneos completos de tablas (una de las raíces de todos los males para el rendimiento de db)

Cuestiones relacionadas