2010-12-15 37 views
0

J'ai un formulaire Web ASP.NET 3.5 avec un DropDownList lié à une table de noms de sociétés dans une base de données. Je aussi ai données lié GridView que je voudrais mettre à jour avec les données de la base de données en fonction du nom de l'entreprise sélectionnée dans la DropDownList, de sorte que SelectCommand pour SqlDataSource est du GridView:Utilisation de paramètres pour configurer le nom de la table dans une SqlDataSource SelectCommand

SELECT Registration, Telephone, Profile FROM {CompanyName}_VehicleData 

Où {CompanyName} est tout ce qui est sélectionné dans DropDownList. J'ai utilisé l'éditeur de commandes et de paramètres pour créer un ControlParameter pointant vers la valeur SelectedValue de DropDownList, mais je ne sais pas comment écrire la requête SelectCommand pour concaténer le paramètre à '_VehicleData'. Des pensées.

+0

Veuillez poster votre code. Comment liez-vous vos contrôles? –

+0

Ils ont été liés à l'aide de l'Assistant Visual Studio 2010 IDE qui vous permet de lier un contrôle à un SqlDataSource. –

Répondre

0

Si vous utilisez un sqldatasource, vous pouvez définir la commande select dans le code derrière.

<sqldatasource>.SelectCommand = "select registration, telephone, profile " & _ 
           "from " & <dropdown>.selectedvalue & "_VehicleData" 
<sqldatasource>.SelectType = SqlDataSourceCommandType.Text 
+0

Le vidage des valeurs des contrôles utilisateur est une très mauvaise idée. Même si vous pensez que vous savez ce que vous êtes susceptible d'obtenir il existe des moyens de publier des données malveillantes sur le serveur et de le faire fonctionner avec cela, plutôt qu'avec ce que vous attendiez. Toujours valider les informations entrantes et ne jamais injecter des données de contrôle directement dans les instructions SQL (c'est le moyen le plus rapide d'obtenir une attaque SQL Injection!) –

+0

@Colin, bon à savoir. Que proposeriez-vous que la solution soit? Vérification de la valeur sélectionnée dans la source de données déroulante avant de la déposer dans la commande select? –

+1

Utilisez des requêtes paramétrées, et dans ce cas un proc stocké qui évalue si la valeur concaténée (DropDown.SelectedValue + "_VehicleData") correspond à une table réelle en utilisant la vue INFORMATION_SCHEMA.TABLES avant de l'injecter dans une commande SQL. Aussi, assurez-vous que QUOTENAME (xxx) est utilisé pour échapper correctement le nom de la table juste au cas où il contient vraiment des caractères étranges. –

-1

@Colin: Vous avez dit que la solution est en train d'écrire une procédure stockée qui permet d'évaluer si la valeur concaténée (DropDown.SelectedValue + « _VehicleData ») à une table cartes réel en utilisant la vue INFORMATION_SCHEMA.TABLES avant de l'injecter dans une commande SQL. Pouvez-vous s'il vous plaît donner un extrait de code pour le proc stocké?