C# 在将单个变量转换为XML时调用存储过程

C# 在将单个变量转换为XML时调用存储过程,c#,xml,stored-procedures,C#,Xml,Stored Procedures,我正在尝试创建一个应用程序,该应用程序调用一个存储过程,该存储过程将来自其他应用程序的错误消息记录到一个集中式数据库中。其中一个要求是将堆栈跟踪数据转换为XML格式,我在构造方法时遇到了困难(将其从字符串转换为XML,然后能够传递),并在另一个方法中适当地调用它。我试图在互联网上寻找一些答案,但没有得到任何结论。任何帮助都将不胜感激 这是我到目前为止进行转换的方法: public void XmlConverter() { string result = "@S

我正在尝试创建一个应用程序,该应用程序调用一个存储过程,该存储过程将来自其他应用程序的错误消息记录到一个集中式数据库中。其中一个要求是将堆栈跟踪数据转换为XML格式,我在构造方法时遇到了困难(将其从字符串转换为XML,然后能够传递),并在另一个方法中适当地调用它。我试图在互联网上寻找一些答案,但没有得到任何结论。任何帮助都将不胜感激

这是我到目前为止进行转换的方法:

    public void XmlConverter() 
    {
        string result = "@StackTrace";

        XmlDocument xd = new XmlDocument();
        StringReader read = new StringReader(result);
        read.Read();
        xd.Load(read);
        StringWriter sw = new StringWriter();
        XmlTextWriter xw = new XmlTextWriter(sw);
        xd.WriteTo(xw);
        StringReader formatXml = new StringReader(sw.ToString());
        XmlTextReader xmlRead = new XmlTextReader(formatXml);
        SqlXml sqlXml = new SqlXml(xmlRead);
        result += sqlXml;
}
       public int LogError(ApplicationErrorLog error, string ret)
    {
        XmlDocument res = new XmlDocument();
        string r;

        var guId = new SqlParameter("@GuId", error.GuId);
        var application = new SqlParameter("@Application", error.Application);
        var objectId = new SqlParameter("@ObjectId", error.ObjectId);
        var exceptionMessage = new SqlParameter("@ExceptionMessage", error.ExceptionMessage);
        var stackTrace = new SqlParameter("@StackTrace", error.StackTrace, r = res.XmlConverter());
        var createdBy = new SqlParameter("@CreatedBy", error.CreatedBy);
        var date = new SqlParameter("@CreatedDatetime", error.CreatedDateTime);
        return Database.ExecuteSqlCommand("exec messageinsert @GuId,@Application,@ObjectId,@ExceptionMessage,@StackTrace,@CreatedBy,@CreatedDatetime",
          guId, application, objectId, exceptionMessage, stackTrace, createdBy, date);
    }
这就是我对存储过程的要求:

    public void XmlConverter() 
    {
        string result = "@StackTrace";

        XmlDocument xd = new XmlDocument();
        StringReader read = new StringReader(result);
        read.Read();
        xd.Load(read);
        StringWriter sw = new StringWriter();
        XmlTextWriter xw = new XmlTextWriter(sw);
        xd.WriteTo(xw);
        StringReader formatXml = new StringReader(sw.ToString());
        XmlTextReader xmlRead = new XmlTextReader(formatXml);
        SqlXml sqlXml = new SqlXml(xmlRead);
        result += sqlXml;
}
       public int LogError(ApplicationErrorLog error, string ret)
    {
        XmlDocument res = new XmlDocument();
        string r;

        var guId = new SqlParameter("@GuId", error.GuId);
        var application = new SqlParameter("@Application", error.Application);
        var objectId = new SqlParameter("@ObjectId", error.ObjectId);
        var exceptionMessage = new SqlParameter("@ExceptionMessage", error.ExceptionMessage);
        var stackTrace = new SqlParameter("@StackTrace", error.StackTrace, r = res.XmlConverter());
        var createdBy = new SqlParameter("@CreatedBy", error.CreatedBy);
        var date = new SqlParameter("@CreatedDatetime", error.CreatedDateTime);
        return Database.ExecuteSqlCommand("exec messageinsert @GuId,@Application,@ObjectId,@ExceptionMessage,@StackTrace,@CreatedBy,@CreatedDatetime",
          guId, application, objectId, exceptionMessage, stackTrace, createdBy, date);
    }

你能用这个吗:是的,看起来很有用,谢谢。您建议我如何从“var stackTrace=new SqlParameter”行中调用它?还是会有更好的地方叫它@flbas1var stackTrace=new-SqlParameter(“@stackTrace”,error.stackTrace.GetXmlString);你能用这个吗:是的,看起来很有用,谢谢。您建议我如何从“var stackTrace=new SqlParameter”行中调用它?还是会有更好的地方叫它@flbas1var stackTrace=new-SqlParameter(“@stackTrace”,error.stackTrace.GetXmlString);