J'ai ce petit problème. Je veux récupérer la valeur résultante d'une instruction select dans une variable chaîne. Comme ça
OleDbCommand cmd1 = new OleDbCommand();
cmd1.Connection = GetConnection();
cmd1.CommandText = "SELECT treatment FROM appointment WHERE patientid = " + text;
cmd1.ExecuteNonQuery();
Je veux le pour placer la valeur de traitement sélectionnée dans une variable chaîne. Comment puis-je faire ceci. Merci
Utilisez ExecuteReader()
et non ExecuteNonQuery()
. ExecuteNonQuery()
renvoie uniquement le nombre de lignes affectées.
try
{
SqlDataReader dr = cmd1.ExecuteReader();
}
catch (SqlException oError)
{
}
while(dr.Read())
{
string treatment = dr[0].ToString();
}
Ou mieux, utilisez une instruction using
.
using(SqlDataReader dr = cmd1.ExecuteReader())
{
while(dr.Read())
{
string treatment = dr[0].ToString();
}
}
Mais si votre SqlCommand
ne retourne que la colonne 1
, vous pouvez utiliser la méthode ExecuteScalar()
. Il retourne la première colonne de la première ligne comme suit: -
cmd.CommandText = "SELECT treatment FROM appointment WHERE patientid = " + text;
string str = Convert.ToString(cmd.ExecuteScalar());
Aussi, vous pouvez ouvrir votre code sur SQL Injection . Toujours utiliser des requêtes paramétrées. Jeff a publié un article de blog intitulé Donnez-moi la SQL paramétrée ou donnez-moi la mort . Veuillez le lire attentivement. Lire aussi DotNetPerl SqlParameter article. L'injection SQL est très importante lorsque vous travaillez avec des requêtes.
Exécutez Scalar: Obtenir une valeur unique de la base de données méthode pour extraire une valeur unique (par exemple, une valeur agrégée) à partir d'une base de données.
cmd1.Connection = GetConnection();
cmd1.CommandText = "SELECT treatment FROM appointment WHERE patientid = " + text;
if(cmd.ExecuteScalar()==null)
{
var treatment = cmd.ExecuteScalar();
}
Autre moyen:ExecuteReader ()
try
{
cmd1.CommandText ="SELECT treatment FROM appointment WHERE patientid=@patientID";
cmd1.Parameters.AddWithValue("@patientID", this.DropDownList1.SelectedValue);
conn.Open();
SqlDataReader dr = cmd1.ExecuteReader();
while (dr.Read())
{
int PatientID = int.Parse(dr["treatment"]);
}
reader.Close();
((IDisposable)reader).Dispose();//always good idea to do proper cleanup
}
catch (Exception exc)
{
Response.Write(exc.ToString());
}
la réponse:
String res = cmd1.ExecuteScalar();
la remarque: utiliser une requête paramétrée pour empêcher l'injection SQL
Il y a beaucoup de problèmes avec votre exemple de code.
Vous utilisez ExecuteNonQuery (), ce qui signifie que vous ne récupérez aucune donnée.
string sSQL = "SELECT treatment FROM appointment WHERE patientid = @patientId";
OleDbCommand cmd1 = new OleDbCommand(sSQL, GetConnection()); // This may be slight different based on what `GetConnectionReturns`, just put the connection string in the second parameter.
cmd1.Parameters.AddWithValue("@patientId", text);
SqlDataReader reader = cmd1.ExecuteReader();
string returnValue;
while(reader.Read())
{
returnValue = reader[0].ToString();
}
SqlConnection dbConnect = new SqlConnection("your SQL connection string");
string name = " 'ProjectName' ";
string strPrj = "Select e.type, (e.surname +' '+ e.name) as fulln from dbo.tblEmployees e where id_prj = " + name;
SqlCommand sqlcmd = new SqlCommand(strPrj, dbConnect);
SqlDataAdapter sda = new SqlDataAdapter(strPrj, dbConnect);
ds = new DataSet();
sda.Fill(ds);
dbConnect.Open();
sqlcmd.ExecuteNonQuery();
dbConnect.Close();
Vous devez juste utiliser la méthode ExecuteScalar de la commande - cela vous donnera la valeur à la première ligne et à la première colonne du jeu de résultats.
OleDbCommand cmd1 = new OleDbCommand();
cmd1.Connection = GetConnection();
cmd1.CommandText = "SELECT treatment FROM appointment WHERE patientid = " + text;
var result = cmd1.ExecuteScalar();
Si votre instruction SQL retourne plus d'une ligne/colonne, vous pouvez utiliser ExecuteReader ().
Vous devez utiliser OleDbAdapter.
string connection = "your connection";
string query = "SELECT treatment FROM appointment WHERE patientid = " + text;
OleDbConnection conn = new OleDbConnection(connection);
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand(query, conn);
adapter.Fill(dataset);