我是网络服务新手,
数据库访问应通过使用 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 服务调用您在数据库中的存储过程,将自定义数据类型中的一些值返回给调用者。
马克
