Est-ce que quelqu'un peut m'aider à comprendre ce qui se passe? J'essaie d'obtenir leUtilisation de variables par rapport à SQL Server dans l'instruction
- SAQA ID
- CNQ Niveau
- Crédits
d'un cours, mais il y a quelque chose que je ne comprends pas.
Si je crée une variable avec ma requête telle que
public Int32 T_Course_Id = 0, T_Company_Id = 0, T_Nqf = 0, T_Credit = 0;
string queryTaskId = "SELECT [course_saqa_id] FROM"+
"[sta].[dbo].[Courses]"+
"WHERE course_name = '" + _Coursename + "'";
string queryNqf = "SELECT [course_nqf]"+
"FROM [sta].[dbo].[Courses]"+
"WHERE course_saqa_id = '" + T_Course_Id + "'";
using (SqlConnection Conn = new SqlConnection(ConnString))
{
Conn.Open();
using (SqlCommand command = new SqlCommand(queryTaskId, Conn))
{
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
reader.Read();
// Call Read before accessing data.
T_Course_Id = reader.GetInt32(0);
}
// Call Close when done reading.
reader.Close();
}
}
using (SqlCommand command = new SqlCommand(queryCredit, Conn))
{
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
reader.Read();
// Call Read before accessing data.
T_Credit = reader.GetInt32(0);
}
// Call Close when done reading.
reader.Close();
}
}
Conn.Close();
}
Si je le fais de cette façon que je reçois une valeur 0 pour la variable T_Credit
, mais si je le fais comme ça (c'est seulement le dernier partie)
using (SqlCommand command = new SqlCommand("SELECT [course_nqf] FROM [sta].[dbo].[Courses] WHERE course_saqa_id = '" + T_Course_Id + "'", Conn))
{
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
reader.Read();
// Call Read before accessing data.
T_Credit = reader.GetInt32(0);
}
// Call Close when done reading.
reader.Close();
}
}
puis-je obtenir la valeur correcte, comme vous pouvez le voir je passe la commande SQL directement au lieu d'une variable
using (SqlCommand command = new SqlCommand("SELECT [course_nqf] FROM [sta].[dbo].[Courses] WHERE course_saqa_id = '" + T_Course_Id + "'", Conn))
Pourquoi une variable ne fonctionnera-t-elle pas ici?
Avez-vous essayé d'utiliser des chaînes de modèle? C# 6 De plus, pourquoi appelez-vous close lorsque vous utilisez déjà le style 'using() {...}'? –
Il semble que c'est juste une faute de frappe, vous utilisez la mauvaise variable dans votre premier cas. Vous devriez utiliser 'queryNqf' au lieu de' queryCredit'. – Alisson
[Alerte d'injection SQL] (http://msdn.microsoft.com/fr-fr/library/ms161953%28v=sql.105%29.aspx) - vous ne devez pas ** concaténer ensemble vos instructions SQL - utilisez ** requêtes paramétrées ** à la place pour éviter l'injection SQL - consultez [Little Bobby Tables] (https://xkcd.com/327/) –