J'ai une procédure de stockage dans SQL Server qui a comme paramètre un type de valeur de table.
Le type de table valorisé est le suivant :
CREATE TYPE [Serveis].[tblType_DispensadorBebidas_Abonados] AS TABLE
(
[ID] [varchar](9) NOT NULL,
[Field1] [smallint] NOT NULL,
[Field2] [smallint] NOT NULL,
[Date] [datetime] NOT NULL,
PRIMARY KEY ([ID])
)
Ensuite, la procédure stockée prend ce type de valeur de table comme paramètre :
PROCEDURE [dbo].[AddData]
@DataTable MytableValuedType READONLY
En C#, je crée une DataTable comme ci-dessous :
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(string)).SetOrdinal(0);
dt.Columns.Add("Field1", typeof(ushort)).SetOrdinal(1);
dt.Columns.Add("Field2", typeof(ushort)).SetOrdinal(2);
dt.Columns.Add("Date", typeof(DateTime)).SetOrdinal(3);
dt.Rows.Add(this.ID,this.Field1,this.Field2,this.Date);
En C#, les types de données sont :
- Chaîne d'identification
- Champ1 ushort
- Champ2 ushort
- Date DateTime
et ensuite je crée un paramètre SQL :
SqlParameter param = new SqlParameter();
param.ParameterName = "@DataTable";
param.Value = dt;
param.SqlDbType = SqlDbType.Structured;
Ajoutez-le en utilisant command.Parameters.Add(param)
et enfin j'appelle ExecuteNonQuery.
Il jette l'erreur (traduite de l'espagnol) :
Column type 'Field1' not allowed. The type is "'UInt16'".
Comment pourrais-je résoudre ce problème ?