Skip to main content
 首页 » 编程设计

c#之如何使用 C# 通过 Web 服务调用存储过程

2024年01月13日29insus

我是网络服务新手,

数据库访问应通过使用 ADO.NET 的 Web 服务来访问存储过程。

有什么想法吗?

请您参考如下方法:

如果您重新开始,我强烈建议您开始使用 WCF(而不是旧式 ASMX Web 服务)。

在这种情况下,您需要:

1) 服务契约(Contract)(定义网络服务操作的接口(interface)):

[ServiceContract] 
public interface IMyDataService 
{ 
    [OperationContract] 
    YourDataType GetData(int idValue); 
} 

2) Data Contract 将为您的调用定义数据结构(此处:返回类型 YourDataType):

[DataContract] 
public class YourDataType 
{ 
    bool boolValue = true; 
    string stringValue = "Hello "; 
 
    [DataMember] 
    public bool BoolValue 
    { 
        get { return boolValue; } 
        set { boolValue = value; } 
    } 
 
    [DataMember] 
    public string StringValue 
    { 
        get { return stringValue; } 
        set { stringValue = value; } 
    } 
} 

3) 一个服务类,它将实际实现您的网络服务方法并使用存储过程调用数据库 - 如下所示:

public class YourDataService : IMyDataService 
{ 
    public YourDataType GetData(int idValue) 
    { 
        YourDataType result = new YourDataType(); 
 
        using(SqlConnection _con = new SqlConnection("server=(local);database=test;integrated security=SSPI;")) 
        { 
            using(SqlCommand _cmd = new SqlCommand("YourStoredProcName", _con)) 
            { 
                _cmd.Parameters.AddWithValue("@ID", idValue); 
 
                _cmd.Parameters.Add("@OutStringValue", SqlDbType.VarChar, 20) 
                               .Direction = ParameterDirection.Output; 
                _cmd.Parameters.Add("@OutBoolValue", SqlDbType.Bit) 
                               .Direction = ParameterDirection.Output; 
 
                _cmd.ExecuteNonQuery(); 
 
                result.StringValue = _cmd.Parameters["@OutStringValue"].Value.ToString(); 
                result.BoolValue = Convert.ToBoolean(_cmd.Parameters["@OutBoolValue"].Value); 
 
            } 
        } 
 
        return result; 
    } 
} 

在这里,请注意,我完全假设您的存储过程是什么样的(在我的例子中,类似于:

CREATE PROCEDURE dbo.YourStoredProcName 
   (@ID INT, @OutStringValue VARCHAR(20) OUTPUT, @OutBoolValue BIT OUTPUT) 

这对你来说可能完全不同!您需要确保根据您的实际情况进行调整!

4) 最后,您将需要一种方式来托管您的 WCF 服务(在 IIS 中,或者您自己在控制台应用程序或 NT 服务中)——这只是标准的 WCF 工作

5) 最后但并非最不重要的一点是,您的客户端应用程序需要向该 WCF 服务“添加服务引用”才能调用它 - 再次声明:这完全是标准的 WCF 内容,此处不需要特殊步骤。

现在您已经拥有了它 - 一个 WCF 服务调用您在数据库中的存储过程,将自定义数据类型中的一些值返回给调用者。

马克