2009-05-17 7 views
0

J'ai une chaîne d'élémentsID, et je veux que le gridview utilise ce paramètre et récupère-moi le reste des détails de la table item. Le problème que je pense est itemIDs est au format varchar et le db itemID est au format int. À cause de cela lorsque la page gridview qui affiche les détails de l'élément charges je reçois l'erreur suivante. Eh bien, je pense que c'est la cause de l'erreur, corrigez-moi si je me trompe!convertir une valeur de chaîne à int lors de la vérification avec le db en C#

Conversion failed when converting the varchar value ' + itemIDs + ' to data type int. 

la requête SQL utilisée est la suivante:

SELECT ItemID, Name, RelDate, Price, Status FROM item_k WHERE (ItemID IN (' + itemIDs + ')) 

chaîne de itemID contient des valeurs comme "3,16,8"

comment puis-je le convertir au format int? et où placer la conversion? dans la déclaration SQL?

grâce

// modifier 2

ArrayList tmpArrayList = new ArrayList(); 

    tmpArrayList = (ArrayList)Session["array"]; 

    string itemIDs = string.Empty; 

    foreach (object itemID in tmpArrayList) 
    { 
     itemIDs += itemID.ToString() + ','; 
    } 

    itemIDs = itemIDs.Substring(0, itemIDs.Length - 1); 

est-il un moyen simple de résoudre ce problème?

Répondre

2

Je pense que le problème est avec la colonne ItemID, pas la chaîne itemIDs ou vous avez des guillemets autour de 3,16,8.

Le SQL doit être

SELECT ItemID, Name, RelDate, Price, Status FROM item_k 
WHERE ItemID IN (3,16,8) 

qui est en supposant ItemID est en effet un entier, et je suppose qu'il devrait être.

Si vous avez le même scénario pour les non-entier dans l'article, il serait

SELECT * FROM table 
WHERE columnname IN ('Val1','VaL2') 

Addition Pour nulls:

SELECT * FROM table 
WHERE (columnname IN ('Val1','VaL2') OR columnname IS NULL) 

ou

SELECT * FROM table 
WHERE (columnname IN ('Val1','VaL2') AND columnname IS NOT NULL) 

Addition pour la deuxième question:Refer to article "Join a String Using Delimiters" pour des solutions multiples. Aussi, en aparté, j'utiliserais une liste <int>/List (Of Integer) (C#, vb.net respectivement) au lieu de ArrayList si vous utilisez .NET 2.0+ Framework.

+0

Oui, cela fonctionnera bien. Pas de citation autour de 3,16,8. MAIS la chaîne itemIDs peut avoir plus de trois valeurs spécifiques et parfois null.Dans ce cas, comment doit-il être fait? merci – pier

+0

Section ajoutée pour adresser les valeurs nulles –

0

Je pense que c'est mettre la chaîne littérale ' + itemIDs + ' dans la requête au lieu d'ajouter la valeur de la chaîne itemIDs à ​​la requête. Il serait utile de voir réellement le code où vous construisez la requête.

+0

Voici comment j'obtiens la chaîne itemIDs, Refer // éditer 1 en question. \ J'ai utilisé l'assistant dans gridview pour écrire la requête. merci – pier

1

Voir ma réponse de here. Essentiellement vous passez la chaîne de int à une fonction comme varchar (8000), renvoyez une variable de table et joignez-vous à cette variable avec votre table. Le code SQL de la fonction est inclus dans ma réponse. Cela fonctionne bien avec les rapports SQL et avec d'autres instances où vous aurez un nombre variable d'int avec lequel vous souhaitez filtrer.

Questions connexes