C# 使用XML作为存储过程输入的查询生成器
我想创建一个查询生成器,它允许用户通过在网页上选择下拉列表/文本输入等来构建查询,从而创建一个包含查询过滤器的XML文件,例如(从网页/视图构建的XML): 我在这里找到了查询XML或接收XML然后插入到表中的示例,但是谁能给我一个简单的示例,说明如何设置过程来解析XML参数和构建SQLC# 使用XML作为存储过程输入的查询生成器,c#,sql,xml,sql-server-2008,stored-procedures,C#,Sql,Xml,Sql Server 2008,Stored Procedures,我想创建一个查询生成器,它允许用户通过在网页上选择下拉列表/文本输入等来构建查询,从而创建一个包含查询过滤器的XML文件,例如(从网页/视图构建的XML): 我在这里找到了查询XML或接收XML然后插入到表中的示例,但是谁能给我一个简单的示例,说明如何设置过程来解析XML参数和构建SQL 我正在使用C#(MVC)和SQL Server 2008。您可以使用xsl将xml文件转换为SQL文件 比如: <xsl:transform version="2.0" xmlns:xsl="http:/
我正在使用C#(MVC)和SQL Server 2008。您可以使用xsl将xml文件转换为SQL文件 比如:
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output method="text" omit-xml-declaration="yes"/>
<xsl:template match="/">
<xsl:text> </xsl:text>
<xsl:for-each select="Filters">
<xsl:apply-templates select="Filter" />
</xsl:for-each>
</xsl:template>
<xsl:template match="Filter">
<xsl:text>Select * from </xsl:text><xsl:value-of select="@Table"/>
<xsl:text> WHERE </xsl:text><xsl:value-of select="@Column"/>
<xsl:choose>
<xsl:when test="@Predicate = 0"><xsl:text disable-output-escaping="yes"> > </xsl:text></xsl:when>
<xsl:when test="@Predicate = 1"><xsl:text disable-output-escaping="yes"> < </xsl:text></xsl:when>
<xsl:when test="@Predicate = 2"><xsl:text> = </xsl:text></xsl:when>
</xsl:choose>
<xsl:value-of select="@Value"/>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:transform>
从中选择*
哪里
>
<
=
这将转化为:
<Filters>
<Filter Table="MyTable" Column="Total" Value="1234" Predicate="0"></Filter>
<Filter Table="MyTable" Column="Total" Value="1234" Predicate="1"></Filter>
</Filters>
为此:
Select * from MyTable WHERE Total > 1234
Select * from MyTable WHERE Total < 1234
从总计>1234的MyTable中选择*
从总计小于1234的MyTable中选择*
第一部分是能够创建XML文档,我想您已经知道如何正确地创建XML文档了?其次,您必须在将查询发送到服务器之前对其进行解析。。。。查看这篇文章。最后,您必须从解析的内容构建查询字符串,并将其发送到SQL Server。您需要哪部分帮助?您好,是的,我可以创建XML并解析表名、列、值等。我需要一些关于如何设置存储过程以接收解析的值并将其作为SQL查询执行的帮助-非常感谢您可以使用C将其转换为SQL#为什么需要存储过程?我只是猜测存储过程,其思想是用户可以从网页构建自己的查询,并将其转换为可执行的SQL—谢谢
<Filters>
<Filter Table="MyTable" Column="Total" Value="1234" Predicate="0"></Filter>
<Filter Table="MyTable" Column="Total" Value="1234" Predicate="1"></Filter>
</Filters>
Select * from MyTable WHERE Total > 1234
Select * from MyTable WHERE Total < 1234