| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449 |
- //
- // System.Web.UI.WebControls.SqlDataSource
- //
- // Authors:
- // Ben Maurer ([email protected])
- // Sanjay Gupta ([email protected])
- // Chris Toshok ([email protected])
- //
- // (C) 2003 Ben Maurer
- // (C) 2004-2006 Novell, Inc. (http://www.novell.com)
- //
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to
- // permit persons to whom the Software is furnished to do so, subject to
- // the following conditions:
- //
- // The above copyright notice and this permission notice shall be
- // included in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- //
- #if NET_2_0
- using System.Collections;
- using System.Collections.Specialized;
- using System.Configuration;
- using System.Drawing;
- using System.Web.Configuration;
- using System.Data.Common;
- using System.Data.SqlClient;
- using System.Text;
- using System.ComponentModel;
- namespace System.Web.UI.WebControls {
- [ParseChildrenAttribute (true)]
- [PersistChildrenAttribute (false)]
- [DefaultPropertyAttribute ("SelectQuery")]
- [DesignerAttribute ("System.Web.UI.Design.WebControls.SqlDataSourceDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
- [DefaultEventAttribute ("Selecting")]
- public class SqlDataSource : DataSourceControl {
- static readonly string [] emptyNames = new string [] { "DefaultView" };
-
- public SqlDataSource ()
- {
- }
- public SqlDataSource (string connectionString, string selectCommand)
- {
- ConnectionString = connectionString;
- SelectCommand = selectCommand;
- }
-
- public SqlDataSource (string providerName, string connectionString, string selectCommand)
- {
- ProviderName = providerName;
- ConnectionString = connectionString;
- SelectCommand = selectCommand;
- }
- protected override DataSourceView GetView (string viewName)
- {
- if (String.IsNullOrEmpty (viewName) || (String.Compare (viewName, emptyNames [0], StringComparison.InvariantCultureIgnoreCase) == 0))
- return View;
- else
- throw new ArgumentException ("viewName");
- }
-
- protected virtual SqlDataSourceView CreateDataSourceView (string viewName)
- {
- SqlDataSourceView view = new SqlDataSourceView (this, viewName, this.Context);
- if (IsTrackingViewState)
- ((IStateManager) view).TrackViewState ();
- return view;
- }
- protected virtual DbProviderFactory GetDbProviderFactory ()
- {
- DbProviderFactory f = null;
- if (!String.IsNullOrEmpty (ProviderName)) {
- f = DbProviderFactories.GetFactory(ProviderName);
- return f;
- }
- return SqlClientFactory.Instance;
- }
- internal DbProviderFactory GetDbProviderFactoryInternal ()
- {
- return GetDbProviderFactory ();
- }
- protected override ICollection GetViewNames ()
- {
- return emptyNames;
- }
-
- public int Insert ()
- {
- return View.Insert (null);
- }
-
- public int Delete ()
- {
- return View.Delete (null, null);
- }
-
- public IEnumerable Select (DataSourceSelectArguments args)
- {
- return View.Select (args);
- }
-
- public int Update ()
- {
- return View.Update (null, null, null);
- }
- protected internal override void OnInit (EventArgs e)
- {
- Page.LoadComplete += OnPageLoadComplete;
- }
- void OnPageLoadComplete (object sender, EventArgs e)
- {
- FilterParameters.UpdateValues (Context, this);
- SelectParameters.UpdateValues (Context, this);
- }
- protected override void LoadViewState (object savedState)
- {
- Pair p = savedState as Pair;
- if (p != null) {
- base.LoadViewState (p.First);
- ((IStateManager) View).LoadViewState (p.Second);
- }
- }
-
- protected override object SaveViewState ()
- {
- object me = base.SaveViewState (), view = ((IStateManager) View).SaveViewState ();
- if (me != null || view != null)
- return new Pair (me, view);
- else
- return null;
- }
-
- protected override void TrackViewState ()
- {
- base.TrackViewState ();
- if (view != null)
- ((IStateManager) view).TrackViewState ();
- }
- [DefaultValue (true)]
- public virtual bool CancelSelectOnNullParameter {
- get { return View.CancelSelectOnNullParameter; }
- set { View.CancelSelectOnNullParameter = value; }
- }
- [DefaultValue (ConflictOptions.OverwriteChanges)]
- public ConflictOptions ConflictDetection {
- get { return View.ConflictDetection; }
- set { View.ConflictDetection = value; }
- }
- [DefaultValue (SqlDataSourceCommandType.Text)]
- public SqlDataSourceCommandType DeleteCommandType {
- get { return View.DeleteCommandType; }
- set { View.DeleteCommandType = value; }
- }
- [DefaultValue (SqlDataSourceCommandType.Text)]
- public SqlDataSourceCommandType InsertCommandType {
- get { return View.InsertCommandType; }
- set { View.InsertCommandType = value; }
- }
- [DefaultValue (SqlDataSourceCommandType.Text)]
- public SqlDataSourceCommandType SelectCommandType {
- get { return View.SelectCommandType; }
- set { View.SelectCommandType = value; }
- }
- [DefaultValue (SqlDataSourceCommandType.Text)]
- public SqlDataSourceCommandType UpdateCommandType {
- get { return View.UpdateCommandType; }
- set { View.UpdateCommandType = value; }
- }
- [DefaultValue ("{0}")]
- public string OldValuesParameterFormatString {
- get { return View.OldValuesParameterFormatString; }
- set { View.OldValuesParameterFormatString = value; }
- }
- [DefaultValue ("")]
- public string SortParameterName
- {
- get { return View.SortParameterName; }
- set { View.SortParameterName = value; }
- }
- [DefaultValueAttribute ("")]
- public string FilterExpression
- {
- get { return View.FilterExpression; }
- set { View.FilterExpression = value; }
- }
- private string providerName = "";
- [DefaultValueAttribute ("")]
- [TypeConverterAttribute ("System.Web.UI.Design.WebControls.DataProviderNameConverter, " + Consts.AssemblySystem_Design)]
- public virtual string ProviderName {
- get { return providerName; }
- set
- {
- providerName = value;
- RaiseDataSourceChangedEvent (EventArgs.Empty);
- }
- }
- private string connectionString = "";
- [EditorAttribute ("System.Web.UI.Design.WebControls.SqlDataSourceConnectionStringEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
- [DefaultValueAttribute ("")]
- public virtual string ConnectionString {
- get { return connectionString; }
- set
- {
- connectionString = value;
- RaiseDataSourceChangedEvent (EventArgs.Empty);
- }
- }
- // LAME SPEC: MSDN says value should be saved in ViewState but tests show otherwise.
- private SqlDataSourceMode dataSourceMode = SqlDataSourceMode.DataSet;
- [DefaultValueAttribute (SqlDataSourceMode.DataSet)]
- public SqlDataSourceMode DataSourceMode {
- get { return dataSourceMode; }
- set
- {
- dataSourceMode = value;
- RaiseDataSourceChangedEvent (EventArgs.Empty);
- }
- }
-
- [DefaultValueAttribute ("")]
- public string DeleteCommand {
- get { return View.DeleteCommand; }
- set { View.DeleteCommand = value; }
- }
-
- [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
- [MergablePropertyAttribute (false)]
- [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
- [DefaultValueAttribute (null)]
- public ParameterCollection DeleteParameters {
- get { return View.DeleteParameters; }
- }
-
- [DefaultValueAttribute (null)]
- [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
- [MergablePropertyAttribute (false)]
- [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
- public ParameterCollection FilterParameters {
- get { return View.FilterParameters; }
- }
-
- [DefaultValueAttribute ("")]
- public string InsertCommand {
- get { return View.InsertCommand; }
- set { View.InsertCommand = value; }
- }
-
- [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
- [DefaultValueAttribute (null)]
- [MergablePropertyAttribute (false)]
- [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
- public ParameterCollection InsertParameters {
- get { return View.InsertParameters; }
- }
- [DefaultValueAttribute ("")]
- public string SelectCommand {
- get { return View.SelectCommand; }
- set { View.SelectCommand = value; }
- }
-
- [DefaultValueAttribute (null)]
- [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
- [MergablePropertyAttribute (false)]
- [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
- public ParameterCollection SelectParameters {
- get { return View.SelectParameters; }
- }
-
- [DefaultValueAttribute ("")]
- public string UpdateCommand {
- get { return View.UpdateCommand; }
- set { View.UpdateCommand = value; }
- }
-
- [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
- [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
- [MergablePropertyAttribute (false)]
- [DefaultValueAttribute (null)]
- public ParameterCollection UpdateParameters {
- get { return View.UpdateParameters; }
- }
-
- #region TODO
- int cacheDuration = 0;
- bool enableCaching = false;
- string cacheKeyDependency = null;
- string sqlCacheDependency = null;
- DataSourceCacheManager cache = null;
- DataSourceCacheExpiry cacheExpirationPolicy = DataSourceCacheExpiry.Absolute;
- internal DataSourceCacheManager Cache
- {
- get
- {
- if (cache == null)
- cache = new DataSourceCacheManager (CacheDuration, CacheKeyDependency, CacheExpirationPolicy, this, Context);
- return cache;
- }
- }
-
- [DefaultValue ("")]
- public virtual string CacheKeyDependency
- {
- get { return cacheKeyDependency != null ? cacheKeyDependency : string.Empty; }
- set { cacheKeyDependency = value; }
- }
- [MonoTODO ("SQLServer specific")]
- [DefaultValue ("")]
- public virtual string SqlCacheDependency {
- get { return sqlCacheDependency != null ? sqlCacheDependency : string.Empty; }
- set { sqlCacheDependency = value; }
- }
- [DefaultValue (0)]
- public virtual int CacheDuration {
- get { return cacheDuration; }
- set
- {
- if (value < 0)
- throw new ArgumentOutOfRangeException ("value", "The duration must be non-negative");
- cacheDuration = value;
- }
- }
- [DefaultValue (DataSourceCacheExpiry.Absolute)]
- public virtual DataSourceCacheExpiry CacheExpirationPolicy {
- get { return cacheExpirationPolicy; ; }
- set { cacheExpirationPolicy = value; }
- }
- [DefaultValue (false)]
- public virtual bool EnableCaching {
- get { return enableCaching; }
- set
- {
- if (DataSourceMode == SqlDataSourceMode.DataReader && value == true)
- throw new NotSupportedException ();
- enableCaching = value;
- }
- }
- #endregion
-
- public event SqlDataSourceStatusEventHandler Deleted {
- add { View.Deleted += value; }
- remove { View.Deleted -= value; }
- }
-
- public event SqlDataSourceCommandEventHandler Deleting {
- add { View.Deleting += value; }
- remove { View.Deleting -= value; }
- }
-
- public event SqlDataSourceStatusEventHandler Inserted {
- add { View.Inserted += value; }
- remove { View.Inserted -= value; }
- }
-
- public event SqlDataSourceFilteringEventHandler Filtering {
- add { View.Filtering += value; }
- remove { View.Filtering -= value; }
- }
- public event SqlDataSourceCommandEventHandler Inserting {
- add { View.Inserting += value; }
- remove { View.Inserting -= value; }
- }
-
- public event SqlDataSourceStatusEventHandler Selected {
- add { View.Selected += value; }
- remove { View.Selected -= value; }
- }
-
- public event SqlDataSourceSelectingEventHandler Selecting {
- add { View.Selecting += value; }
- remove { View.Selecting -= value; }
- }
-
- public event SqlDataSourceStatusEventHandler Updated {
- add { View.Updated += value; }
- remove { View.Updated -= value; }
- }
-
- public event SqlDataSourceCommandEventHandler Updating {
- add { View.Updating += value; }
- remove { View.Updating -= value; }
- }
-
- SqlDataSourceView view;
- SqlDataSourceView View {
- get {
- if (view == null) {
- view = CreateDataSourceView ("DefaultView");
- if (IsTrackingViewState)
- ((IStateManager) view).TrackViewState ();
- }
- return view;
- }
- }
- }
- }
- #endif
|