Apparemment, le code suivant n'imprime rien comme prévu. Je suis sûr qu'il est de faire avec le fait que j'ai essayé de mettre une liste d'éléments dans Comment puis-je résoudre ce problème? Merci p> @Namelist code>. Clairement, ce n'est pas simplement un remplacement de texte.
3 Réponses :
Vous n'utilisez pas votre liste maintenant. Si vous n'en avez pas besoin pour quelque chose d'autre, vous pouvez simplement faire cela:
using (var connection = new SqlConnection(_connectionString))
{
connection.Open();
using (var cmd = connection.CreateCommand())
{
cmd.CommandText = @"select column_name, table_name from information_schema.columns where table_name in ('tradeName', 'tableOne', 'tableTwo')"
var reader = cmd.ExecuteReader();
while (reader.Read())
{
var a = reader[0];
Console.WriteLine(a);
}
}
Qu'est-ce qu'il y a avec le -1 et aucun commentaire?
Malheureusement, les paramètres SQL ne sont pas résolus em> de cette façon, en d'autres termes, le backend ne consiste pas simplement à construire une chaîne de sécurité remplaçant chaque paramètre avec sa valeur. Au lieu de cela, vous devrez créer de manière dynamique une liste de paramètres: puis ajouter chaque paramètre: p> vous pouvez bien sûr ajouter ces paramètres dans une boucle si le nombre était inconnu jusqu'à l'exécution: p> si votre liste de tables a été stockée dans un Ceci est, bien sûr, l'une des grandes raisons que j'utilise < un href = "http://www.postgresql.org/"> postgresql ; Support natif pour les tableaux. P> P> Enum code> ou vous pouvez vous échapper les ou les valident avec une expression régulière, il serait également assez sûr de simplement construire le SQL brut vous-même et ne pas utiliser les paramètres du tout. P>
Oracle a des tableaux associatifs. SQL Server a des paramètres de valeur de table.
J'ai vérifié dans les paramètres de la valeur de table une fois et c'était trop déroutant pour moi. Ado.net ne ferait pas simplement le maréchal sur les données en tant que tableau, et dans la SPTP, vous avez dû participer à cette table TEMP ou de non-sens. Postgres vous permet de passer à une chaîne [] code> en tant que param et do où x in (: myarraray) code> - la façon dont vous vous attendez à fonctionner.
Comme il a été noté, "dans" listes, etc. sont notoirement maladroits dans Ado.net; Pour cette raison, certains outils offrent des méthodes de commodité pour aider. Par exemple, DAPPER STRAND> offre une variante sur la syntaxe "IN" qu'il élargit automatiquement à la forme paramétrée correcte (sécurité d'injection toujours conditionnelle, etc.) - Utilisation "dynamique" de type et "dynamique". Par exemple: string[] namelist = ...
foreach(var row in conn.Query(@"
select column_name, table_name
from information_schema.columns
where table_name in @namelist",
new { namelist } ))
{
string col = row.column_name,
table = row.table_name;
// ..
}
Frick Man, qu'est-ce qui ne peut pas faire Dapper!
Euh, vous ne faites rien avec
@Namelist code>?Au lieu de "Tradename" dans votre addWithValue avez-vous essayé @Namelist
Ma solution personnelle est celle-ci La réponse inclut une méthode d'extension pour convertir
ienumerable code> à iEnumerable code> J'ai entendu parler de quelqu'un qu'il pourrait y avoir une question de sécurité si cela est autorisé. C'est SQL Server qui n'autorise pas cela plutôt que sur la couche DotNet. Quelqu'un a des commentaires sur cela?