que j'ai rencontré cette situation dans laquelle cette instruction SQL ne fonctionne pas ..C# requête de sélection ne fonctionne pas avec les paramètres
command.Parameters.AddWithValue("@OA_Name", obj.GEToperatingauthority());
command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = [@OA_Name]";
mais cette instruction SQL fonctionne quand j'ai changé le [ « @OA_Name »] simplement un valeur trouvée dans le tableau.
command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = ['OA 101']";
J'ai testé la valeur que je suis arrivé du obj.GetOperatingauthority() et il est exactement le même que celui de la base de données. Je l'ai utilisé reader.hasrows pour vérifier s'il y a des lignes retournées ..
BTW je suis en utilisant C# et base de données d'accès 2010 ..
edit: je l'ai mis dans la majeure partie du code ci-dessous:
using (var command = connection.CreateCommand())
{
connection.Open();
command.CommandType = CommandType.Text;
command.Parameters.AddWithValue("@NRIC", obj.GETnricfinnumber());
command.Parameters.AddWithValue("@Participant_Name", obj.GETname());
command.Parameters.AddWithValue("@Gender", obj.GETgender());
command.Parameters.AddWithValue("@DOB", obj.GETdateofbirth());
command.Parameters.AddWithValue("@Nationality", obj.GETnationality());
command.Parameters.AddWithValue("@Race", obj.GETrace());
command.Parameters.AddWithValue("@Residential_Address", obj.GETresidentialaddress());
command.Parameters.AddWithValue("@Contact_Number", obj.GETcontactnumber());
command.Parameters.AddWithValue("@Email_Address", obj.GETemailaddress());
command.CommandText = "SELECT [NRIC] FROM [Participant_Table] WHERE [NRIC] = [@NRIC]";
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
if (reader.GetString(0).ToLower().Equals(obj.GETnricfinnumber().ToLower()))
{
message.show(1, "", "exists");
//return false;
}
}
}
command.CommandText = "SELECT [OA_ID] FROM [Operating_Authority_Table] WHERE [OA_Name] = @OA_Name";
command.Parameters.AddWithValue("@OA_Name", obj.GEToperatingauthority());
using (var reader = command.ExecuteReader())
{
if (!reader.HasRows)
{
message.show(1, "", "no rows!"); return false; //to test whether has rows or no rows
}
edit 2: l'instruction getOperatingAuthority ne peut pas être erronée car il s'agit essentiellement d'un système en "boucle fermée" par lequel OA_Name sont utilisés pour remplir une zone de liste déroulante, et les valeurs sélectionnées dans cette zone de liste déroulante sont renvoyées à la table obtenir l'ID.
est votre paramètre @OA_Name retournant 'OA 101' ou simplement OA 101? –
'OA 101' est le nom exact de l'école et j'essaie de retourner son identifiant (PK). en utilisant ce 'OA 101', reader.hasrows m'a retourné vrai – user776914
pour l'enregistrement dans le code ci-dessus, je déplacerais "command.Parameters.AddWithValue (" @ OA_Name ", obj.GEToperatingauthority());" sauvegarder en haut, et assurez-vous d'inclure le [] autour de votre @OA_Name. Je ne vois aucune raison qui ne devrait pas fonctionner si les autres travaillent ... –