En la llibreria que crida a SQL Server que m'he fet falta la crida a Stored Procedures, i estic mirant de com fer-ho. He trobat llocs on fan d'una manera, hi ha per tots els gustos. El que he trobat és una forma un xic arriscada: la que fa servir el tipus "object" de C#. Primer cal veure que és el "boxing/unboxing".
int i = 123;
// La següent linia "boxes" (encapsa) i.object o = i;
Cal observar que encara que sigui un "object" la variable conserva el tipus, i també que ocupa un espai de memòria diferent a la variable que a encapsat. Es a dir, que si "i" modifica el seu valor el "object" no. Igualment un cop des-encapsada si es modifica l'object no es modifica la variable on s'ha assignat el seu valor.
int i = 123; // un valorobject o = i; // encapsatint j = (int)o; // des-encapsat
Cal vigilar molt que quan es el des-encapsat la variable a la que es fa l'assignació ha de ser del mateix tipus que la original, si no es produeix una InvalidCastException.
I els SQL Parameters? Doncs resulta que els SqlParameter tenen un constructor que té els següents paràmetres: Constructor (String, Object). On el "string" és el nom del paràmetre i el "object" és el valor. El constructor dedueix el tipus del paràmetre a partir del tipus de l'objecte encapsat. I ho fa seguint la següent taula:
Tipus de la variable
Tipus a la BBDD
Boolean
Bit
Byte
TinyInt
byte[]
VarBinary (cal vigilar si la longitud de l'array supera la longitud del varbinary)
Char
No suportat
DateTime
DateTime
DateTimeOffset
DateTimeOffset (només a partir de SQL Server 2008 inclòs)
Decimal
Decimal
Double
Float
Single
Real
Guid
UniqueIdentifier
Int16
SmallInt
Int32 (els int normals)
Int
Int64
BigInt
String
NVarChar (cal vigilar si la longitud de l'string supera la longitud del nvarchar)
TimeSpan
Time (només a partir de SQL Server 2008 inclòs)
Aleshores és molt perillós passar un object al constructor del SqlParameter perquè es fàcil despistar-se i que no encaixi amb el tipus de base de dades i com està "boxed" no hi ha una visió del que està passant exactament.
#13/02/2015 13:32 Programació C# SQLServer Autor: Alex Canalda