2017-08-08 3 views
0

J'ai un code simple pour créer SqlParameter pour Type de table. Le code donné fonctionne très bien avec .NET 4.0. Problème avec MONO CS (3.12.0), je ne peux pas simplement compiler le même code dans MONO.Problème de paramètre Table Valued avec MONO cs

static SqlParameter GetDataTableParam(string _tableName, DataTable _dt) 
{ 
    SqlParameter tValue = new SqlParameter(); 
    tValue.ParameterName = "@dr" + _tableName; //@drFactory 
    tValue.SqlDbType = SqlDbType.Structured; 
    tValue.Value = _dt; 

    tValue.TypeName = string.Format("dbo.{0}Item", _tableName); //MONO CS is giving error at this line 
    return tValue; 
} 

compilateur Mono me donner cette erreur:

Error CS1061: Type `System.Data.SqlClient.SqlParameter' does not contain a definition for `TypeName' and no extension method `TypeName' of type `System.Data.SqlClient.SqlParameter' could be found. Are you missing an assembly reference? (CS1061)

Le code donné essaie simplement de créer un paramètre pour TableValued Type et passer table de données pour instruction d'insertion SQL.

Je sais que l'erreur peut être résolue si j'utilise une procédure stockée, mais dans mon cas, il est impossible de créer MERGE insert SP pour chaque table.

Alors s'il vous plaît aidez-moi s'il y a un travail autour de ce problème.

Remarque: Il est connu que MONO System.Data.SqlClient.SqlParameter n'a pas la propriété TypeName. Si je supprime cette propriété, il compile très bien mais donne l'erreur de temps:

The table type parameter '@drFactory' must have a valid type name.

Répondre

0

classe MONO SqlParameter ne pas exposer TypeName propriété, mais il est là dans le code source.

Alors, je l'ai utilisé Reflection pour définir la valeur à la propriété TypeName:

SqlParameter tValue = new SqlParameter("@dr" + _tableName, _dt); 
tValue.SqlDbType = SqlDbType.Structured; 

System.Reflection.PropertyInfo propertyInfo = tValue.GetType().GetProperty("TypeName"); 
propertyInfo.SetValue(tValue, "dbo.factoryItem", null);