将XMLDocument传递给存储过程

时间:2016-04-21 14:19:08

标签: javascript c# sql-server xml xmldocument

我目前的设置如下:

客户端Javascript JSON字符串化对象如此传递给服务器函数

客户端:

pre-compiled header file

服务器:

var requestObject = JSON.stringify(clientObject);

$.ajax({
    url: 'ServerClass.aspx/ServerFunction',
    data: requestObject,
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    cache: false,
    context: document.body,
    type: 'POST',
    success: saveSuccessfulFunction
});

存储过程成功从传入的XMLDocument中提取不同的节点/属性,然后继续执行相关的update / insert命令。

[WebMethod(EnableSession = true)]
public static int SaveAllReportOptions(string requestObject)
{
    XmlDocument xdoc = JsonConvert.DeserializeXmlNode("{\"root\":" + clientObject + "}", "roots");            

    DBClass.Save(xdoc);            
}

public int Save(XmlDocument clientObject)
{
    SqlCommand dCmd = new SqlCommand("MyStoredProcedure", conn);
    dCmd.CommandType = CommandType.StoredProcedure;
    dCmd.Parameters.AddWithValue("@objectXML", SqlDbType.Xml).Value = clientObject.InnerXml;

     SqlParameter returnValue = dCmd.Parameters.Add("@ret", SqlDbType.Int);
     returnValue.Direction = ParameterDirection.ReturnValue;

     conn.Open();
     dCmd.ExecuteNonQuery();
     conn.Close();

     int i = Convert.ToInt32(dCmd.Parameters["@ret"].Value);
     return i;
}

我的问题不在于上述代码,但是从某些在线/内部软件编码标准中观察到了某些问题。

来源1

  

X不要使用XmlNode或XmlDocument来表示XML数据。支持使用IXPathNavigable,XmlReader,XmlWriter或XNode的子类型的实例。 XmlNode和XmlDocument不是为在公共API中公开而设计的。

来源2

  

✓使用XmlReader,IXPathNavigable或XNode的子类型作为接受或返回XML的成员的输入或输出。   使用这些抽象而不是XmlDocument,XmlNode或XPathDocument,因为这会将方法与内存中XML文档的特定实现分离,并允许它们使用公开XNode,XmlReader或XPathNavigator的虚拟XML数据源。

来源3

  

如果要创建表示基础对象模型或数据源的XML视图的类型,请不要对XmlDocument进行子类化。

基本上,我想知道它是否安全可靠,足以将XMLDocument用于上述目的。如果没有,如果有任何替代方案更适合我的方案。

0 个答案:

没有答案