2009-09-29 42 views
1

我是网络服务的新手,如何使用c#通过webservice调用存储过程?

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

有什么想法?

+0

下一个简单[通过Web服务,存储过程和SQL查询数据访问(http://www.csharphelp.com/archives/archive252.html) – rahul 2009-09-29 04:14:15

+0

上面的网址不工作了。 。因此更新相同。 http://www.csharphelp.com/2006/07/data-access-through-web-services-stored-procedures-and-sql-query/ – Ditty 2013-02-07 22:45:05

回答

5

请参阅The C# Station ADO.NET Tutorial - Lesson 07: Using Stored Procedures

本课说明如何在数据访问代码使用存储过程 。 以下是本 节课的目标:

  • 了解如何修改SqlCommand对象使用存储过程 。
  • 了解如何在存储过程中使用参数。
+0

@Andrew Hare,我知道存储过程的正常执行。 我想知道,如何从Web服务调用和执行sp。 这是什么Web服务的卷。怎么做 ? – Anuya 2009-09-29 04:07:22

+0

+1这是一个很好的通过存储过程访问ADO.NET的教程。有没有人知道Web服务在ADO.NET中的作用同样好? – 2009-09-29 04:07:28

+0

@karthik,我想你无论如何都会需要这个。 – 2009-09-29 04:08:38

15

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

在这种情况下,你需要:

1)服务合同在您的Web服务(定义操作(接口)):

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

2)数据合同将定义的数据结构,为您的呼叫(这里的返回类型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)服务类,将真正实现Web服务方法和使用存储过程进行调用数据库 - 是这样的:

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服务调用你的存储过程在数据库中,返回一些自定义数据类型的值返回给调用者。

马克

+0

梦幻般的答案! – davewasthere 2009-09-29 12:39:56