Comment faire pour récupérer tous les champs d'un enregistrement à l'aide de OracleDataReader?
Ma question, qui est similaire à cette une, est de savoir comment puis-je utiliser OracleDataReader pour récupérer tous les champs d'un enregistrement donné? Actuellement, j'ai été en utilisant cette méthode, qui ne retourne qu'une seule valeur de la colonne à la fois:
public string Select_File(string filename, string subdirectory, string envID)
{
Data_Access da = new Data_Access();
OracleConnection conn = da.openDB();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT * FROM EIP_Deployment_Files"
+ " WHERE Filename ='" + filename + "'"
+ " AND Subdirectory = '" + subdirectory + "'"
+ " AND Environment_ID = '" + envID + "'";
cmd.CommandType = CommandType.Text;
string x;
OracleDataReader dr = cmd.ExecuteReader();
if (dr.HasRows) //file exists in DB
{
dr.Read();
x = dr.GetString(2).ToString(); //return baseline filename (index 2)
}
else
{
x = "New File";
}
cmd.Dispose();
da.CloseDB(conn);
return x;
}
Je suis sûr que cette méthode est loin d'être parfait et ppl aura vite fait de le signaler (j'ai été donnés par mon directeur de thèse, puisque je n'ai aucune expérience préalable dans ASP.NET) mais je me préoccupe vraiment, c'est que cela fonctionne. Ma question est: comment peut-il être modifié pour revenir tous les champs d'un enregistrement donné?
Les champs seront de VARCHAR2, CHAR, ou de la DATE de types de données, (si cela fait une différence) et certaines de ces valeurs peuvent être null. Je pense que je pourrais les convertir en chaînes et de les retourner comme une liste?
cmd.CommandText
est vulnérable à des attaques par injectionOriginalL'auteur user1985189 | 2013-04-25
Vous devez vous connecter pour publier un commentaire.
si tu veux quelque chose comme ceci:
C'est à la lecture de chaque colonne par nom, ce qui n'est pas tout à fait la même chose que la lecture de toutes les colonnes quels que soient leurs noms sont.
Remarque:
sqlQuery
est vulnérable à des attaques par injectionComme @rdev5 souligné, cet exemple de code a de graves problèmes de sécurité, le code n'est pas la vérification de DBNull qui va provoquer des exceptions lors de la conversion.Pour... les méthodes sont invoquées. dbManager .Disposer de la méthode ne doit pas être invoqué dans le bloc finally comme c'est déjà dans un bloc using.
OriginalL'auteur Asif Mahamud
De lire toutes les données dans les colonnes de la ligne courante dans un DataReader, vous pouvez simplement utiliser GetValues(), et extraire les valeurs de l'array - ils être des Objets, des types de base de données.
MSDN - "Pour la plupart des applications, la méthode GetValues fournit un moyen efficace pour récupérer toutes les colonnes, plutôt que de récupérer chaque colonne individuellement."
OUI. Il remplit le tableau d'objets que vous transmettez, tout en renvoyant le nombre de colonnes que la valeur de retour. Voici un lien vers les docs pour ça: msdn.microsoft.com/en-us/library/...
ok merci alors ce qui se passe sous la
//read values[i]
partie?Eh bien, je ne suis pas sûr de savoir comment vous voulez lire les valeurs, c'est pourquoi le pseudo-code. Vous pouvez lire les valeurs[i] (qui sera un Objet) dans tout ce que vous voulez, un StringBuilder, un tableau, une structure, quelle que soit.
OriginalL'auteur Jasmine
Désolé pour l'affichage d'une réponse à une très vieille question. Comme aucune des réponses n'est correcte (soit ils ont des problèmes de sécurité ou non la vérification de DBNull), j'ai décidé de poster mon propre.
OriginalL'auteur Vamshi Krishna