Récupérer de Multiples domaines à partir de SQL Server dans un service web?
Je m test comment récupérer des données à partir de SQL Server dans le Service Web. Je m à l'aide de SQL Server 2008 R2, asp.net application de service web modèle de projet dans VS 2010.
Disons que j'ai une table qui dispose de 4 colonnes et w/o tout constaints(pour l'intérêt de la conversation).
- Prénom
- LastName
- Université
Je veux être en mesure d'obtenir toutes les valeurs de ma table SQL si un utilisateur entre la valeur de Prénom. Plus tard je voudrais changer de Prénom pour NTID ou des colonnes.Maintenant mon service web renvoie la valeur unique disons LastName si un utilisateur tape Prénom.
Être un nouveau pour les services web, j'essaie d'apprendre autant que je peux et je serais très reconnaissant de votre temps et d'efforts pour m'aider. TIA.
Où/comment puis-je modifier dans mon code ci-dessous
Voici mes Données de la classe helper
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
namespace EmployeeRecs
{
public class DataHelper
{
//create new method to get Employee record based on First Name
public static string GetEmployee(string firstName)
{
string LastName = "";
//Create Connection
SqlConnection con = new SqlConnection (@"Data Source=myDBServer;Initial Catalog=MyDataBase;Integrated Security=true;");
//Sql Command
SqlCommand cmd = new SqlCommand("Select LastName from Employees where FirstName ='" + firstName.ToUpper() + "'", con);
//Open Connection
con.Open();
//To Read From SQL Server
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
LastName = dr["LastName"].ToString();
}
//Close Connection
dr.Close();
con.Close();
return LastName;
}
}
}
Et voici mon asmx.cs de la classe
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace EmployeeRecs
{
///<summary>
///Summary description for Service1
///</summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
//To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
//[System.Web.Script.Services.ScriptService]
public class Service1 : System.Web.Services.WebService
{
//Create new web method to get Employee last name
[WebMethod]
public string GetEmployee(string firstName)
{
return DataHelper.GetEmployee(firstName);
}
}
}
mieux utiliser les procédures stockées, pas inline requêtes sql
comment? TIA.
SqlCommand cmd = new SqlCommand("mystoredprocedurename", con); cmd.CommandType = CommandType.StoredProcedure;
SqlCommandBuilder.DeriveParameters(vCmd); vCmd.Les paramètres["@prenom"].Valeur = prénom;
OriginalL'auteur Nemo | 2012-07-12
Vous devez vous connecter pour publier un commentaire.
En plus de l'injection SQL, peu de choses:
Créer un DataContract et de créer un modèle pour les données que vous souhaitez retourner
Combler ce modèle avec vos résultats de la Requête SQL et de retour de votre service
Exposer:
Code complet de l'OP pour la postérité:
Ce qui peut être utile à d'autres personnes aux prises avec la même situation. Donc, je m de poster mon code pour la solution:
Créer un nouveau Projet WCF dans VS 2010, j'ai utilisé .net version 3.5 et sélectionné WCF Service de la Bibliothèque, en vertu de la WCF modèle.
Voici mon code sous IService1.cs
Et voici mon code en vertu de Service1.cs
Mis à jour avec des exemples de code. Je n'ai même pas tenter de construire cela, alors je ne prends absolument 100% de crédit si elle fonctionne, et de 0% à blâmer s'il n'en est rien 😉
Torres-De - Grâce. Je m à l'aide d' .NET 3.5. Je pense que [contrat de Données] est basée sur WCF 4.0, je ne suis pas familier avec. La création de [DataContract] et [Données] me donne un message d'erreur "le type ou Le nom d'espace de noms 'DataContract'couldn pas trouvé.. vous avez perdu une directive using ou une référence d'assembly... Aucune solution à mon scénario, s'il vous plaît?
Il est disponible en 3.5. Pro-tip: appuyez sur CTRL-ESPACE quand, en plus, un nom de classe comme ça, et il devrait autoresolve si elle est valide. Dans ce cas, vous devez assurez-vous d'inclure le Système.Moment de l'exécution.La sérialisation de l'espace de noms.
Torres - MERCI loooot. Vous avez fait ma journée! 🙂 J'ai mis à jour ma version avec votre aide. Merci encore! Vous êtes une source d'INSPIRATION! 😀
OriginalL'auteur Jaime Torres