|
|
|
 |
 |
Исходник |
 |
|
 |
 |
|
Автор:
|
|
|
Название:
|
SqlXml контрол |
|
Дата:
|
02 November 2006 |
|
Описание: |
Контрол требует наличие sqlxml3. Я его использовал для проверки шаблонов запросов и шаблонов преобразований к ним. Если кто использует asp.net1.1 в сочетании с sql server 2000 - может пригодиться. |
| |
Разместить ссылку на этот исходник в форуме вы можете вставив в текст сообщения
следующую строку:
[CODEPOST ID=198]SqlXml контрол[/CODEPOST] |
| Оценить: |
|
1 using System;
2 using System.Collections.Specialized;
3 using System.Configuration;
4 using System.Text;
5 using System.IO;
6 using System.Web.UI;
7 using System.Web.UI.Design;
8 using System.Drawing.Design;
9 using System.ComponentModel;
10 using System.Xml;
11 using System.Xml.XPath;
12 using System.Xml.Xsl;
13 using Microsoft.Data.SqlXml;
14
15
16 namespace SqlXmlControlLibrary
17 {
18 /// <summary>
19 /// Summary description for WebCustomControl1.
20 /// </summary>
21 [ToolboxData("<{0}:SqlXmlControl runat=server></{0}:SqlXmlControl>")]
22 public class SqlXmlControl : System.Web.UI.Control
23 {
24 private string _sqlConnectionString=String.Empty;
25 private string _appSettingsKeyConnectionString=String.Empty;
26 private XmlDocument _document;
27 private XslTransform _transform;
28 private string _documentSource=String.Empty;
29 private string _transformSource=String.Empty;
30 private XsltArgumentList _transformArgumentList;
31 private NameValueCollection _sqlParams;
32 private bool _useQueryString=false;
33
34 /// <summary>
35 /// Конструктор
36 /// </summary>
37 public SqlXmlControl()
38 {
39 _transformArgumentList=new XsltArgumentList();
40 _sqlParams=new NameValueCollection();
41 }
42 /// <summary>
43 /// Строка подключения
44 /// </summary>
45 [Bindable(true),Category("Appearance"),DefaultValue("")]
46 public string SqlConnectionString
47 {
48 get
49 {
50 return _sqlConnectionString;
51 }
52
53 set
54 {
55 _sqlConnectionString =value;
56 }
57 }
58 /// <summary>
59 /// Указывает надо ли использовать параметры строки запроса
60 /// </summary>
61 [Bindable(true),Category("Appearance"),DefaultValue(false)]
62 public bool UseQueryString
63 {
64 get
65 {
66 return _useQueryString;
67 }
68
69 set
70 {
71 _useQueryString =value;
72 }
73 }
74 /// <summary>
75 /// Ключ key в разделе appSettings конфигурационного файла для строки подключения к базе
76 /// </summary>
77 [Bindable(true),Category("Appearance"),DefaultValue("")]
78 public string AppSettingsKeyConnectionString
79 {
80 get
81 {
82 return _appSettingsKeyConnectionString;
83 }
84
85 set
86 {
87 _appSettingsKeyConnectionString =value;
88 _sqlConnectionString=ConfigurationSettings.AppSettings[value];
89 }
90 }
91 /// <summary>
92 /// XmlDocument представляющий запрос типа шаблон(template)
93 /// </summary>
94 public XmlDocument Document
95 {
96 get
97 {
98 return _document;
99 }
100 set
101 {
102 _document=value;
103 }
104 }
105 /// <summary>
106 /// XslTransform для преобразования вывода
107 /// </summary>
108 public XslTransform Transform
109 {
110 get
111 {
112 return _transform;
113 }
114 set
115 {
116 _transform=value;
117 }
118 }
119 /// <summary>
120 /// Путь к файлу шаблона запроса
121 /// </summary>
122 [Bindable(true),Category("Appearance"),DefaultValue("")]
123 [EditorAttribute(typeof(System.Web.UI.Design.XmlUrlEditor), typeof(UITypeEditor))]
124 public string DocumentSource
125 {
126 get
127 {
128 return _documentSource;
129 }
130 set
131 {
132 _documentSource = value;
133 }
134 }
135 /// <summary>
136 /// Путь к файлу xslt-шаблона преобразования
137 /// </summary>
138 [Bindable(true),Category("Appearance"),DefaultValue("")]
139 [EditorAttribute(typeof(System.Web.UI.Design.XslUrlEditor), typeof(UITypeEditor))]
140 public string TransformSource
141 {
142 get
143 {
144 return _transformSource;
145 }
146 set
147 {
148 _transformSource = value;
149 }
150 }
151 /// <summary>
152 /// Аргументы xslt-преобразования
153 /// </summary>
154 public XsltArgumentList TransformArgumentList
155 {
156 get
157 {
158 return _transformArgumentList;
159 }
160 set
161 {
162 _transformArgumentList=value;
163 }
164 }
165 /// <summary>
166 /// Изменение значения параметра запроса в шаблоне (template)
167 /// </summary>
168 /// <param name="name">Имя параметра</param>
169 /// <param name="value">Значение</param>
170 public void AddSqlParam(string name, string value)
171 {
172 _sqlParams.Add(name,value);
173 }
174 /// <summary>
175 /// Render this control to the output parameter specified.
176 /// </summary>
177 /// <param name="output"> The HTML writer to write out to </param>
178 protected override void Render(HtmlTextWriter output)
179 {
180 if(_useQueryString && Page.Request.QueryString.Count>0)
181 {
182 string[] arrKeys= Page.Request.QueryString.AllKeys;
183 for(int i=0;i<arrKeys.Length;i++)
184 {
185 AddSqlParam(arrKeys[i],Page.Request.QueryString.GetValues(arrKeys[i])[0]);
186 }
187 }
188 if(_document==null)
189 {
190 _document=new XmlDocument();
191 _document.Load((Path.IsPathRooted(_documentSource))?_documentSource:Page.Server.MapPath(_documentSource));
192 }
193 if(_transform==null && _transformSource!=String.Empty)
194 {
195 _transform=new XslTransform();
196 _transform.Load((Path.IsPathRooted(_transformSource))?_transformSource:Page.Server.MapPath(_transformSource));
197 }
198 //--
199 XmlNamespaceManager mngr=new XmlNamespaceManager(_document.NameTable);
200 mngr.AddNamespace("sql","urn:schemas-microsoft-com:xml-sql");
201 for(int i=0;i<_sqlParams.Count;i++)
202 {
203 XmlNode param=_document.SelectSingleNode("//sql:param[@name='"+_sqlParams.GetKey(i)+"']",mngr);
204 if(param!=null)
205 {
206 param.InnerText=_sqlParams.Get(i);
207 }
208 }
209 //--
210 SqlXmlCommand cmd=new SqlXmlCommand(_sqlConnectionString);
211 cmd.CommandType=SqlXmlCommandType.Template;
212 cmd.CommandText=_document.OuterXml;
213 XPathDocument xpdoc;
214 XmlReader reader =cmd.ExecuteXmlReader();
215 if(_transform!=null)
216 {
217 xpdoc=new XPathDocument(reader);
218 _transform.Transform(xpdoc,_transformArgumentList,output);
219 }
220 else
221 {
222 string strTemp;
223 reader.Read();
224 strTemp=reader.ReadOuterXml();
225 while(strTemp.Length>0)
226 {
227 output.Write(strTemp);
228 strTemp=reader.ReadOuterXml();
229 }
230 }
231 reader.Close();
232 }
233
234
235 }
236 }
237 |
| Вернуться к списку исходников в категории ADO.NET |
|
|
 |
 |
 |
 |
|
|