带有sql的动态网页

时间:2013-10-10 08:56:15

标签: c# asp.net sql

我正在尝试使用SQL数据库构建一个包含更改控件的动态网页。 因为我还需要表和div,所以我无法插入每个控件的sql,因为它不会累加到SQL表上。基本上我试图复制整个HTML并将其放在一行,但这似乎不起作用,我不能把它作为纯文本。也许有一些建议吗?

我正在查找任何Object SQL,所以我可以将整个表单作为字节或任何其他方式插入。 在C#上是否有OSQL库?(我想做这个服务器端)或者有关如何正确执行此操作的任何提示?

我试图将HTML代码插入SQL以供将来使用,但这给了我错误

    StringWriter sw = new StringWriter();
    HtmlTextWriter w = new HtmlTextWriter(sw);
    Form1.RenderControl(w);
    string s = sw.GetStringBuilder().ToString();
 string command = "INSERT INTO `htmltables`(`Company`, `Type`, `HTML`) VALUES  ('TestCompany','TestType','" + s + "')";

在任何情况下,我都希望插入Objects而不是纯HTML,因为这将在未来简化我的工作。

提前谢谢。

3 个答案:

答案 0 :(得分:0)

尝试修复您的查询:

"INSERT INTO `htmltables`(`Company`, `Type`, `HTML`) VALUES 
('TestCompany','TestType','" + s + "')"
  1. 尝试从字符串中删除字符。

    "INSERT INTO htmltables(Company, Type, HTML) VALUES ('TestCompany','TestType','" + s + "')"

  2. 并尝试使用以下参数:

    "INSERT INTO htmltables(Company, Type, HTML) VALUES (@0,@1,@2)", "The Company", "TestType", s

  3. 然后进行查询。

    对我来说只有这个错误。

    将div添加到数据库

    这不是问题,问题可能是服务器不允许这样的角色认为它们可能是潜在的。为此你可以试试这个:

    Request.Unvalidated["name"];
    

    这样,服务器就可以插入div或任何其他HTML标记。

      

    基本上我试图复制整个html并把它放在一行,但这似乎不起作用,我不能把它作为纯文本。

    当你使用我建议的术语时它应该有效,但是等等,你说这似乎不起作用所以你怎么能得到文本?除非有一些数据,否则不会提供任何内容。你的问题有点令人困惑。对不起。

    参考:

    http://technet.microsoft.com/en-us/library/aa214012(v=sql.80).aspx

    MSDN将是你在这个问题上最好的伙伴! :)

答案 1 :(得分:0)

您的html文本可能包含Sql的不正确字符。最安全的方法是使用参数。

例如:

        string connectionString = "";
        string html = "<div id=\'loremIpsum\'><div/>";

        using (SqlCommand command = new SqlConnection(connectionString).CreateCommand())
        {
            command.CommandText = "insert into YourTable (YourColumn) values(@yourParameter)";
            command.Parameters.Add(new SqlParameter("yourParameter", html));
            try
            {
                command.Connection.Open();
                command.ExecuteNonQuery();
            }
            finally
            {
                command.Connection.Close();
            }
        }

答案 2 :(得分:0)

序列化你的类并将xml对象放在数据库中,这是一个序列化类的示例和用于与object / xml进行序列化的函数:

<强> VB.net

Imports System.Runtime.Serialization
Imports System.Xml
Imports System.IO
Imports System.Text

Namespace NamespaceGoesHere
    <DataContract()> _
    Public Class ClassNameGoesHere
        'All your properties go here, for example:
        <DataMember> Property PropertyName As String = "test"
        'Note the use of <DataMember> and <DataContract()>

        #Region "Serialisation"
            Public Function Serialise() As String
                Dim s As New System.IO.MemoryStream
                Dim x As New DataContractSerializer(GetType(ClassNameGoesHere))

                x.WriteObject(s, Me)
                s.Position = 0

                Dim sw As New StreamReader(s)
                Dim str As String

                str = sw.ReadToEnd()

                Return str
            End Function

            Public Shared Function DeSerialise(xmlDocument As String) As ClassNameGoesHere
                Dim doc As New XmlDocument
                Dim ser As New DataContractSerializer(GetType(ClassNameGoesHere))

                Dim stringWriter As New StringWriter()
                Dim xmlWriter As New XmlTextWriter(stringWriter)

                doc.LoadXml(xmlDocument)
                doc.WriteTo(xmlWriter)

                Dim stream As New MemoryStream(Encoding.UTF8.GetBytes(stringWriter.ToString()))
                stream.Position = 0
                Dim reader As XmlDictionaryReader = XmlDictionaryReader.CreateTextReader(stream, New XmlDictionaryReaderQuotas())

                Return DirectCast(ser.ReadObject(reader, True), ClassNameGoesHere)
            End Function
        #End Region
    End Class
End Namespace

<强> C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Runtime.Serialization;
using System.Xml;
using System.IO;
using System.Text;

namespace NamespaceGoesHere
{
    [DataContract()]
    public class ClassNameGoesHere
    {
        //All your properties go here, for example:
        [DataMember()]
        public string PropertyName { get; set; }
        //Note the use of [DataMember()] and [DataContract()]

        #region "Serialisation"
        public string Serialise()
        {
            System.IO.MemoryStream s = new System.IO.MemoryStream();
            DataContractSerializer x = new DataContractSerializer(typeof(ClassNameGoesHere));

            x.WriteObject(s, this);
            s.Position = 0;

            StreamReader sw = new StreamReader(s);
            string str = null;

            str = sw.ReadToEnd();

            return str;
        }

        public static ClassNameGoesHere DeSerialise(string xmlDocument)
        {
            XmlDocument doc = new XmlDocument();
            DataContractSerializer ser = new DataContractSerializer(typeof(ClassNameGoesHere));

            StringWriter stringWriter = new StringWriter();
            XmlTextWriter xmlWriter = new XmlTextWriter(stringWriter);

            doc.LoadXml(xmlDocument);
            doc.WriteTo(xmlWriter);

            MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(stringWriter.ToString()));
            stream.Position = 0;
            XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(stream, new XmlDictionaryReaderQuotas());

            return (ClassNameGoesHere)ser.ReadObject(reader, true);
        }
        #endregion
    }
}

创建类后,可以使用serialise函数将其序列化为xml字符串。将其存储在数据库中(我将使用XML数据类型,但您可以将其存储为NVARCHAR(MAX)。 从数据库返回时,只需调用传递字符串的deserialise函数,你就可以重新获得对象了。