2009-09-29 88 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