2 // System.Web.UI.WebControls.SqlDataSource
5 // Ben Maurer (bmaurer@users.sourceforge.net)
6 // Sanjay Gupta (gsanjay@novell.com)
7 // Chris Toshok (toshok@ximian.com)
10 // (C) 2004-2006 Novell, Inc. (http://www.novell.com)
14 // Permission is hereby granted, free of charge, to any person obtaining
15 // a copy of this software and associated documentation files (the
16 // "Software"), to deal in the Software without restriction, including
17 // without limitation the rights to use, copy, modify, merge, publish,
18 // distribute, sublicense, and/or sell copies of the Software, and to
19 // permit persons to whom the Software is furnished to do so, subject to
20 // the following conditions:
22 // The above copyright notice and this permission notice shall be
23 // included in all copies or substantial portions of the Software.
25 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
29 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35 using System.Collections;
36 using System.Collections.Specialized;
37 using System.Configuration;
39 using System.Web.Configuration;
40 using System.Data.Common;
41 using System.Data.SqlClient;
43 using System.ComponentModel;
45 namespace System.Web.UI.WebControls {
47 [ParseChildrenAttribute (true)]
48 [PersistChildrenAttribute (false)]
49 [DefaultPropertyAttribute ("SelectQuery")]
50 [DesignerAttribute ("System.Web.UI.Design.WebControls.SqlDataSourceDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
51 [DefaultEventAttribute ("Selecting")]
52 public class SqlDataSource : DataSourceControl {
54 public SqlDataSource ()
58 public SqlDataSource (string connectionString, string selectCommand)
60 ConnectionString = connectionString;
61 SelectCommand = selectCommand;
64 public SqlDataSource (string providerName, string connectionString, string selectCommand)
66 ProviderName = providerName;
67 ConnectionString = connectionString;
68 SelectCommand = selectCommand;
71 protected override DataSourceView GetView (string viewName)
73 if (viewName == "" || viewName == null)
76 throw new ArgumentException ("viewName");
79 protected virtual SqlDataSourceView CreateDataSourceView (string viewName)
81 SqlDataSourceView view = new SqlDataSourceView (this, viewName, this.Context);
82 view.DataSourceViewChanged += new EventHandler (ViewChanged);
83 if (IsTrackingViewState)
84 ((IStateManager) view).TrackViewState ();
88 protected virtual DbProviderFactory GetDbProviderFactory ()
90 DbProviderFactory f = null;
92 if (ProviderName != null && ProviderName != "") {
94 f = DbProviderFactories.GetFactory(ProviderName);
101 return SqlClientFactory.Instance;
104 internal DbProviderFactory GetDbProviderFactoryInternal ()
106 return GetDbProviderFactory ();
109 protected override ICollection GetViewNames ()
111 return new string [] { "DefaultView" };
116 return View.Insert (null);
121 return View.Delete (null, null);
124 public IEnumerable Select (DataSourceSelectArguments args)
126 return View.Select (args);
131 return View.Update (null, null, null);
134 protected override void LoadViewState (object savedState)
136 Pair p = savedState as Pair;
138 base.LoadViewState (p.First);
139 ((IStateManager) View).LoadViewState (p.Second);
143 protected override object SaveViewState ()
145 object me = base.SaveViewState (), view = ((IStateManager) View).SaveViewState ();
146 if (me != null || view != null)
147 return new Pair (me, view);
152 protected override void TrackViewState ()
154 base.TrackViewState ();
156 ((IStateManager) view).TrackViewState ();
162 public virtual string CacheKeyDependency {
163 get { return ViewState.GetString ("CacheKeyDependency", ""); }
164 set { ViewState ["CacheKeyDependency"] = value; }
168 [DefaultValue (true)]
169 public virtual bool CancelSelectOnNullParameter {
170 get { return ViewState.GetBool ("CancelSelectOnNullParameter", true); }
171 set { ViewState["CancelSelectOnNullParameter"] = value; }
175 [DefaultValue (ConflictOptions.OverwriteChanges)]
176 public ConflictOptions ConflictDetection {
177 get { return (ConflictOptions) ViewState.GetInt ("ConflictDetection", (int)ConflictOptions.OverwriteChanges); }
178 set { ViewState ["ConflictDetection"] = value; }
182 [DefaultValue (SqlDataSourceCommandType.Text)]
183 public SqlDataSourceCommandType DeleteCommandType {
184 get { return (SqlDataSourceCommandType) ViewState.GetInt ("DeleteCommandType", (int)SqlDataSourceCommandType.StoredProcedure); }
185 set { ViewState ["DeleteCommandType"] = value; }
189 [DefaultValue (SqlDataSourceCommandType.Text)]
190 public SqlDataSourceCommandType InsertCommandType {
191 get { return (SqlDataSourceCommandType) ViewState.GetInt ("InsertCommandType", (int)SqlDataSourceCommandType.StoredProcedure); }
192 set { ViewState ["InsertCommandType"] = value; }
196 [DefaultValue (SqlDataSourceCommandType.Text)]
197 public SqlDataSourceCommandType SelectCommandType {
198 get { return (SqlDataSourceCommandType) ViewState.GetInt ("SelectCommandType", (int)SqlDataSourceCommandType.StoredProcedure); }
199 set { ViewState ["SelectCommandType"] = value; }
203 [DefaultValue (SqlDataSourceCommandType.Text)]
204 public SqlDataSourceCommandType UpdateCommandType {
205 get { return (SqlDataSourceCommandType) ViewState.GetInt ("UpdateCommandType", (int)SqlDataSourceCommandType.StoredProcedure); }
206 set { ViewState ["UpdateCommandType"] = value; }
210 [DefaultValue ("{0}")]
211 public string OldValuesParameterFormatString {
212 get { return ViewState.GetString ("OldValuesParameterFormatString", "{0}"); }
213 set { ViewState ["OldValuesParameterFormatString"] = value; }
218 public virtual string SqlCacheDependency {
219 get { return ViewState.GetString ("SqlCacheDependency", ""); }
220 set { ViewState ["SqlCacheDependency"] = value; }
225 public string SortParameterName {
226 get { return ViewState.GetString ("SortParameterName", ""); }
227 set { ViewState ["SortParameterName"] = value; }
231 // [TypeConverter (typeof (DataSourceCacheDurationConverter))]
232 public virtual int CacheDuration {
233 get { return ViewState.GetInt ("CacheDuration", 0); }
234 set { ViewState ["CacheDuration"] = value; }
237 [DefaultValue (DataSourceCacheExpiry.Absolute)]
238 public virtual DataSourceCacheExpiry CacheExpirationPolicy {
239 get { return (DataSourceCacheExpiry) ViewState.GetInt ("CacheExpirationPolicy", (int)DataSourceCacheExpiry.Absolute); }
240 set { ViewState ["CacheExpirationPolicy"] = value; }
243 [DefaultValue (false)]
244 public virtual bool EnableCaching {
245 get { return ViewState.GetBool ("EnableCaching", false); }
246 set { ViewState ["EnableCaching"] = value; }
250 [DefaultValueAttribute ("")]
251 [TypeConverterAttribute ("System.Web.UI.Design.WebControls.DataProviderNameConverter, " + Consts.AssemblySystem_Design)]
252 public virtual string ProviderName {
253 get { return ViewState.GetString ("ProviderName", ""); }
254 set { ViewState ["ProviderName"] = value; }
258 [EditorAttribute ("System.Web.UI.Design.WebControls.SqlDataSourceConnectionStringEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
259 [DefaultValueAttribute ("")]
260 public virtual string ConnectionString {
261 get { return ViewState.GetString ("ConnectionString", ""); }
262 set { ViewState ["ConnectionString"] = value; }
265 [DefaultValueAttribute (SqlDataSourceMode.DataSet)]
266 public SqlDataSourceMode DataSourceMode {
267 get { return (SqlDataSourceMode) ViewState.GetInt ("DataSourceMode", (int)SqlDataSourceMode.DataSet); }
268 set { ViewState ["DataSourceMode"] = value; }
271 [DefaultValueAttribute ("")]
272 public string DeleteCommand {
273 get { return View.DeleteCommand; }
274 set { View.DeleteCommand = value; }
277 [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
278 [MergablePropertyAttribute (false)]
279 [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
280 [DefaultValueAttribute (null)]
281 public ParameterCollection DeleteParameters {
282 get { return View.DeleteParameters; }
285 [DefaultValueAttribute (null)]
286 [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
287 [MergablePropertyAttribute (false)]
288 [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
289 public ParameterCollection FilterParameters {
290 get { return View.FilterParameters; }
293 [DefaultValueAttribute ("")]
294 public string InsertCommand {
295 get { return View.InsertCommand; }
296 set { View.InsertCommand = value; }
299 [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
300 [DefaultValueAttribute (null)]
301 [MergablePropertyAttribute (false)]
302 [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
303 public ParameterCollection InsertParameters {
304 get { return View.InsertParameters; }
307 [DefaultValueAttribute ("")]
308 public string SelectCommand {
309 get { return View.SelectCommand; }
310 set { View.SelectCommand = value; }
313 [DefaultValueAttribute (null)]
314 [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
315 [MergablePropertyAttribute (false)]
316 [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
317 public ParameterCollection SelectParameters {
318 get { return View.SelectParameters; }
321 [DefaultValueAttribute ("")]
322 public string UpdateCommand {
323 get { return View.UpdateCommand; }
324 set { View.UpdateCommand = value; }
327 [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
328 [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
329 [MergablePropertyAttribute (false)]
330 [DefaultValueAttribute (null)]
331 public ParameterCollection UpdateParameters {
332 get { return View.UpdateParameters; }
335 [DefaultValueAttribute ("")]
336 public string FilterExpression {
337 get { return View.FilterExpression; }
338 set { View.FilterExpression = value; }
341 public event SqlDataSourceStatusEventHandler Deleted {
342 add { View.Deleted += value; }
343 remove { View.Deleted -= value; }
346 public event SqlDataSourceCommandEventHandler Deleting {
347 add { View.Deleting += value; }
348 remove { View.Deleting -= value; }
351 public event SqlDataSourceStatusEventHandler Inserted {
352 add { View.Inserted += value; }
353 remove { View.Inserted -= value; }
356 public event SqlDataSourceFilteringEventHandler Filtering {
357 add { View.Filtering += value; }
358 remove { View.Filtering -= value; }
361 public event SqlDataSourceCommandEventHandler Inserting {
362 add { View.Inserting += value; }
363 remove { View.Inserting -= value; }
366 public event SqlDataSourceStatusEventHandler Selected {
367 add { View.Selected += value; }
368 remove { View.Selected -= value; }
371 public event SqlDataSourceSelectingEventHandler Selecting {
372 add { View.Selecting += value; }
373 remove { View.Selecting -= value; }
376 public event SqlDataSourceStatusEventHandler Updated {
377 add { View.Updated += value; }
378 remove { View.Updated -= value; }
381 public event SqlDataSourceCommandEventHandler Updating {
382 add { View.Updating += value; }
383 remove { View.Updating -= value; }
386 SqlDataSourceView view;
387 SqlDataSourceView View {
390 view = CreateDataSourceView ("DefaultView");
391 view.DataSourceViewChanged += new EventHandler (ViewChanged);
392 if (IsTrackingViewState)
393 ((IStateManager) view).TrackViewState ();
399 void ViewChanged (object source, EventArgs e)
401 RaiseDataSourceChangedEvent (e);