8

Je souhaite imprimer une valeur renvoyée par SQL Server.Comment afficher la valeur imprimée par la requête SQL dans la boîte de message

If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemNama') 
    BEGIN 
    INSERT INTO ItemList (ItemName) VALUES('txtItemNamea') 
    END 
ELSE 
    BEGIN 
    Print 'Duplicate' 
    END 

Cette requête soit me renvoyer soit le nombre de lignes affectées ou en double

Je veux utiliser ce double dans C# dans MessageBox.Show()

string query1 = "If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemName') BEGIN INSERT INTO ItemList (ItemName) VALUES('txtItemName') END ELSE BEGIN Print 'Duplicate' END"; 
      SqlCommand cmd = new SqlCommand(query1, conn); 
      SqlDataReader dr; 
      conn.Open(); 
      dr=cmd.ExecuteReader(); 
      conn.Close(); 
MessageBox.Show(dr); 

Je ne sais pas comment utilisez dr pour ce faire. S'il vous plaît, aidez-moi à imprimer en double ici

MessageBox.Show (dr);

Que dois-je faire ici?

+2

Ce serait mieux si vous utilisez l'instruction select au lieu de l'impression pour cela – Brij

+0

@Brij Pouvez-vous me fournir un exemple. Bien que je sois plus intéressé à capturer cette valeur à frontend sinon il y a beaucoup de méthode pour faire la même chose comme curseur et procédure stockée, table dérivée et beaucoup plus –

Répondre

1

En utilisant ADO.NET il y a quatre options pour renvoyer des informations à partir d'une requête SQL:

  • Utilisez un objet DataSet pour recueillir les lignes renvoyées et de travailler avec ces lignes en plus des valeurs de retour et le retour paramètres.
  • Utilisez un objet DataReader pour recueillir les lignes renvoyées, pour passer à travers ces lignes, et de recueillir des valeurs de retour et les paramètres de retour.
  • utiliser la méthode ExecuteScalar pour renvoyer la valeur de la première colonne de la première rangée de résultats avec les valeurs de retour et les paramètres de retour. C'est très utile avec les fonctions d'agrégat.
  • Utilisez la méthode ExecuteNonQuery pour renvoyer uniquement les paramètres de retour et les valeurs de retour. Toutes les lignes renvoyées sont ignorées. Ceci est très utile pour exécuter des requêtes d'action.

Ce sont toutes les méthodes appelées à partir de votre objet de commande.

Il y a beaucoup de façons différentes de peau d'un chat, vous pouvez utiliser les paramètres de sortie, vous pouvez utiliser ExecuteScalar, vous pouvez utiliser des valeurs de retour ou vous pouvez utiliser recordsets factices.

Vous devriez pouvoir quelque chose comme ce qui suit dans votre C# pour obtenir la valeur de retour d'une requête

Le code ci-dessus les captures de la valeur de retour que vous pouvez définir comme vous avez besoin, peut-être avec un 0 pour existe et 1 pour n'existe pas.

If NOT Exists(SELECT * FROM ItemList WHERE ItemName='txtItemNama')  
    BEGIN  
    INSERT INTO ItemList (ItemName) VALUES('txtItemNamea') 
    Return 0;  
    END  
ELSE  
    BEGIN  
    Return 1;  
    END 

Il y a une mise en garde de peu avec les conseils ci-dessus cependant - je l'utilise habituellement soit un ORM comme LINQ to SQL ou NHibernate, ou j'utiliser des procédures stockées. Je trouve inline SQL assez lourd. Donc, alors que ma réponse devrait être bonne en général, vous devrez probablement travailler à travers quelques détails pour le faire fonctionner exactement comme vous le souhaitez.

+0

Même si je n'utilise pas de code inline, je voulais juste effacer mon concept pour récupérer la valeur 'print' au frontend sinon j'utilise la procédure stockée –

7

quelques années en retard, mais vous devriez être en mesure de récupérer l'impression/informations texte (comme initialement demandé) en attachant un eventhandler au InfoMessage event sur l'objet SqlConnection -

Mais seulement faire cela si vous le pouvez » t (pour une raison quelconque) utiliser les alternatives mentionnées dans ce fil.

static void Main(string[] args) 
{ 
    using (SqlConnection connection = new SqlConnection(@"someconnectionstring")) 
    { 
     connection.Open(); 
     using(SqlCommand command = new SqlCommand("test", connection)) 
     { 
      connection.InfoMessage += new SqlInfoMessageEventHandler(connection_InfoMessage); 
      using (SqlDataAdapter adapter = new SqlDataAdapter(command)) 
      { 
       DataTable dt = new DataTable(); 
       adapter.Fill(dt); // Do something with DataTable 
      } 
     } 
    } 
} 

static void connection_InfoMessage(object sender, SqlInfoMessageEventArgs e) 
{ 
    // e contains info message etc 
} 
+0

si je l'avais conditionnée dans la requête comme si true imprimer inséré autre faux puis imprimer 'ne peut pas imprimer' et cet événement obtenir tous les messages else si vrai ou faux – user2491383

Questions connexes