2017-07-27 7 views
0

Pour référence, cette page (add.ashx.cs) est une page d'ajout à une base de données.C# Comment exécuter une chaîne, puis stocker les résultats de cela?

Ce que je suis en train de faire est:

  1. figure comment exécuter chaîne ID_requête, puis
  2. stocker les résultats de ID_requête

Je suis un peu nouveau à ceci, mais c'est ce que je travaille avec jusqu'ici. Suis-je sur la bonne voie, et que devrais-je changer? Je ne crois pas que le code ci-dessous inclut le stockage des résultats, mais simplement l'exécution de queryID.

// new query to get last ID value 
// store the command.executeNonQuery results into a variable 

string queryID = "SELECT TOP (1) IDENT_CURRENT('dbo.license_info') FROM dbo.license_info"; 
// first: look up how to execute queryID 
// then: store results of query^

// execute queryID? (section below) 
SqlConnection sqlConnection1 = new SqlConnection(queryID); 
SqlCommand cmd = new SqlCommand(); 
SqlDataReader reader; 
cmd.CommandText = "Select * FROM queryID"; 
cmd.CommandType = CommandType.Text; 
cmd.Connection = sqlConnection1; 

sqlConnection1.Open(); 

reader = cmd.ExecuteReader(); 
// data is accessible through the datareader object here 

sqlConnection1.Close(); 
+0

Vous essayez de vous connecter à une base de données dont la chaîne de connexion est un peu SQL. Si vous voulez exécuter 'queryID', alors vous devriez le mettre dans' CommandText' (et passer une chaîne de connexion à 'SqlConnection' au lieu de' QueryID') – litelite

+0

Veuillez lire les docs sur SqlConnection et ce qui est attendu dans le constructeur –

Répondre

3

Certaines données sont manquantes dans votre exemple de code. Première queryID est votre requête réelle. Deuxième en SqlConnection vous devez fournir une chaîne de connexion, qui se connecte à votre base de données (SQL Server, ACCESS, ...). Un exemple valide pourrait ressembler à ceci:

// this is just a sample. You need to adjust it to your needs 
    string connectionStr = "Data Source=ServerName;Initial Catalog=DataBaseName;Integrated Security=SSPI;"; 
    SqlConnection sqlConnection1 = new SqlConnection(connectionStr); 
    SqlCommand cmd = new SqlCommand(sqlConnection1); 
    SqlDataReader reader; 

    cmd.CommandText = "SELECT TOP (1) IDENT_CURRENT('dbo.license_info') FROM dbo.license_info"; 
    cmd.CommandType = CommandType.Text; 
    sqlConnection1.Open(); 

    reader = cmd.ExecuteReader(); 

    List<string> results = new List<string>(); 

    if(reader.HasRows) 
    { 
     while(reader.Read()) 
     { 
      results.Add(reader[0].ToString()); 
     } 
    } 

    sqlConnection1.Close(); 

Une autre chose est, que vous exécutez un lecteur, mais ne sélectionnez qu'une seule valeur. Vous pouvez parfaitement utiliser ExecuteScalar pour que:

// this is just a sample. You need to adjust it to your needs 
string connectionStr = "Data Source=ServerName;Initial Catalog=DataBaseName;Integrated Security=SSPI;"; 
SqlConnection sqlConnection1 = new SqlConnection(connectionStr); 
SqlCommand cmd = new SqlCommand(sqlConnection1); 

cmd.CommandText = "SELECT TOP (1) IDENT_CURRENT('dbo.license_info') FROM dbo.license_info"; 
cmd.CommandType = CommandType.Text; 
sqlConnection1.Open(); 

string result = cmd.ExecuteScalar().ToString(); 

sqlConnection1.Close(); 

Une dernière chose. Vous devez utiliser les objets qui implémentent IDisposable dans un bloc using. De cette façon le sera retiré de la mémoire quand ils ne sont plus nécessaires:

// this is just a sample. You need to adjust it to your needs 
string connectionStr = "Data Source=ServerName;Initial Catalog=DataBaseName;Integrated Security=SSPI;"; 
using(SqlConnection sqlConnection1 = new SqlConnection(connectionStr)) 
{ 
    SqlCommand cmd = new SqlCommand(sqlConnection1); 

    cmd.CommandText = "SELECT TOP (1) IDENT_CURRENT('dbo.license_info') FROM dbo.license_info"; 
    cmd.CommandType = CommandType.Text; 
    sqlConnection1.Open(); 

    string result = cmd.ExecuteScalar().ToString(); 
} 
+0

While cette réponse est correcte, certaines améliorations sont nécessaires dans ce code. 1. La requête elle-même peut être simplifiée en 'SELECT IDENT_CURRENT ('dbo.license_info')' 2. Utiliser toutes les instances IDisposable dans une instruction using - SqlConnection, SqlCommand et SqlDataReader implémente IDisposable. –

+0

@ZoharPeled Vous avez raison, j'étais encore en train d'éditer ma réponse avec les améliorations (mais j'ai raté l'amélioration SQL) –

+0

Je l'ai de toute façon remanié :-) –