Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Книги по теме

Искать:
в:
Порядок:

Исходник

Автор:

poimenov

 
Название:

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
 
Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта