2010-08-30 5 views
0

Scénario Avoir une table avec l'une des colonnes varchar (20). La colonne contient principalement des valeurs entières mais nous n'avons pas restreint l'utilisateur. 90% des utilisateurs saisissent 50, mais 5% des utilisateurs saisissent 50 unités. défini une dans la requête de code comme suitensemble de données faiblement typé en supposant des types de données

qry = select coalesc(CONVERT(Varchar(20),column1),'') from table1 

ont obtenu du code C# pour remplir ensemble de données comme suit

DataSet ds = loader.LoadDataSet(qry); 

Maintenant, ce qui se passe est que le temps d'exécution .net obtient la première ligne et parce qu'il est un entier (dans la plupart des cas), il affecte à la colonne un type de données int et dans des scénarios tels que '50 unités ', il retourne vide car column1 est int (vue d'exécution in.net) et échoue à CONVERT (varchar (20), column1) et renvoie la colonne vide (''). Une alternative est d'utiliser un jeu de données fortement typé et de le faire, mais j'aimerais connaître d'autres alternatives pour le faire avant d'aller sur ce chemin.

Répondre

0

Mon mauvais. En fait, c'était la requête sql qui échouait dans le code .net. Quand une colonne est varchar, faire quelque chose comme COALESC(CONVERT(VARCHAR(20),column1),0) échoue. Il devrait être COALESC(CONVERT(VARCHAR(20),column1),'0')