C# 通过ASMXWeb服务将XML参数传递给存储过程
我有一个SQL Server 2005存储过程,其签名如下:C# 通过ASMXWeb服务将XML参数传递给存储过程,c#,wcf,sql-server-2005,stored-procedures,asmx,C#,Wcf,Sql Server 2005,Stored Procedures,Asmx,我有一个SQL Server 2005存储过程,其签名如下: CREATE PROCEDURE [dbo].[ProcTRequest] @Pxml xml, @ClientCode varchar(10) AS BEGIN ... END 我的任务是编写一个调用此存储过程的.asmxweb服务。这就是我的街区 如果参数@Pxml在C#web方法中被指定为string,我们得到 服务器无法处理请求 然后尝试将XmlText作为@Pxml的类型,结果 服务器无法处理请求。无法反映方
CREATE PROCEDURE [dbo].[ProcTRequest]
@Pxml xml, @ClientCode varchar(10)
AS
BEGIN
...
END
我的任务是编写一个调用此存储过程的.asmx
web服务。这就是我的街区
如果参数@Pxml
在C#web方法中被指定为string,我们得到
服务器无法处理请求
然后尝试将XmlText
作为@Pxml
的类型,结果
服务器无法处理请求。无法反映方法MyWebService.MyWebMethod。有一个错误
反映“PXml”。->;反射类型出错
“System.Xml.XmlText”。->System.Xml.XmlText不能用作“Xml”
元素'
从C#web方法调用此存储过程的正确方法是什么?请注意,@Pxml
参数将始终是格式良好的XML
将调用此web服务的人正在Unix系统上使用Curl
虽然这个需求是一个ASMX,但是如果可以通过WCF实现,你能告诉我如何使用一段伪代码吗?我还不熟悉WCF
请帮忙。多谢各位
更新:我就是这样称呼SP的
[WebMethod]
public string GetRequestID(string PXml, string clientcode)
{
Database db = DatabaseFactory.CreateDatabase();
using (IDataReader dr = db.ExecuteReader("ProcRequestID", PXml, clientcode))
{
return dr["RequestID"].ToString();
}
}
您不能在ASMX接口上使用字符串(因此调用者向您发送一个字符串),但在ASMX web服务中,您将存储过程调用上的
@PXml
参数定义为SqlDbType.Xml
?我认为这应该行得通
大致如下:
[WebMethod]
public void MyWebMethod(string input, string clientCode)
{
using (SqlConnection conn = new SqlConnection(your-connection-string-here))
using (SqlCommand cmd = new SqlCommand("dbo.ProcTRequest", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@Pxml", SqlDbType.Xml);
cmd.Parameters.Add("@ClientCode", SqlDbType.VarChar, 10);
cmd.Parameters["@Pxml"].Value = input;
cmd.Parameters["@ClientCode"].Value = clientCode;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
由于您只是调用存储的进程,不希望返回结果集,因此请使用ExecuteNonQuery
而不是ExecuteReader
同样至关重要的是:告诉ADO.NET您正在调用一个存储过程!这条线就是这么做的:
cmd.CommandType = CommandType.StoredProcedure;
否则,ADO.NET在默认情况下会得到完整的内联SQL语句,可能无法解析和执行该语句