-//
+//
// System.Web.UI.WebControls.AccessDataSource.cs
//
// Authors:
// Sanjay Gupta (gsanjay@novell.com)
//
-// (C) 2004 Novell, Inc (http://www.novell.com)
-//
-
+// Copyright (C) 2004-2005 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
using System.IO;
using System.ComponentModel;
+using System.Data.Common;
+using System.Drawing;
+using System.Security.Permissions;
namespace System.Web.UI.WebControls {
- [ DesignerAttribute ("System.Web.UI.Design.WebControls.AccessDataSourceDesigner, System.Design",
- "System.ComponentModel.Design.IDesigner")]
- public class AccessDataSource : SqlDataSource
- {
- string dataFile;
-
+
+ // CAS
+ [AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+ [AspNetHostingPermissionAttribute (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+ // attributes
+ [DesignerAttribute ("System.Web.UI.Design.WebControls.AccessDataSourceDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
+ [ToolboxBitmap ("")]
+ public class AccessDataSource : SqlDataSource {
+
+ const string PROVIDER_NAME = "System.Data.OleDb";
+ const string PROVIDER_STRING = "Microsoft.Jet.OLEDB.4.0";
+
+ //string dataFile;
+ string connectionString;
+
public AccessDataSource () : base ()
{
- this.ProviderName = "System.Data.OleDb";
+ base.ProviderName = PROVIDER_NAME;
}
public AccessDataSource (string dataFile, string selectCommand) :
base (String.Empty, selectCommand)
{
- this.dataFile = dataFile;
- //After setting dataFile, connectionString gets recreated
- //On accessing ConnectionString, MS.Net throws NullReferenceException
- //Need to dig more on this.
- this.ProviderName = "System.Data.OleDb";
+ //this.dataFile = dataFile;
+ this.ProviderName = PROVIDER_NAME;
}
protected override SqlDataSourceView CreateDataSourceView (string viewName)
{
AccessDataSourceView view = new AccessDataSourceView (this, viewName, this.Context);
- view.DataSourceViewChanged += new EventHandler (ViewChanged);
if (IsTrackingViewState)
((IStateManager) view).TrackViewState ();
return view;
}
- void ViewChanged (object source, EventArgs e)
- {
- OnDataSourceChanged (e);
+ [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
+ [Browsable (false)]
+ [MonoTODO("AccessDataSource does not support SQL Cache Dependencies")]
+ public override string SqlCacheDependency {
+ get { throw new NotSupportedException ("AccessDataSource does not supports SQL Cache Dependencies."); }
+ set { throw new NotSupportedException ("AccessDataSource does not supports SQL Cache Dependencies."); }
}
- /*[MonoTODO]
- protected internal override void SaveDataToCache (int startingRowIndex,
- int maxRows, object data)
+ [MonoTODO ("why override? maybe it doesn't call DbProviderFactories.GetFactory?")]
+ protected override DbProviderFactory GetDbProviderFactory ()
{
- throw new NotImplementedException ();
+ return DbProviderFactories.GetFactory (PROVIDER_NAME);
}
- [MonoTODO]
- protected internal override void SaveTotalRowCountToCache(int totalRows)
+ string GetPhysicalDataFilePath ()
{
- throw new NotImplementedException ();
- }
-
- public override string SqlCacheDependency {
- get { throw new NotSupportedException ("AccessDataSource does not supports SQL Cache Dependencies."); }
- set { throw new NotSupportedException ("AccessDataSource does not supports SQL Cache Dependencies."); }
- }*/
+ if (DataFile == null || DataFile == "")
+ return "";
- //Above commented out portion will come into place after implementing
- // stuff in SqlDataSource class.
- //Overrid implementation will depend on how .Net stores data in
- //Cache property of HttpContext object.
+ // more here? how do we handle |DataDirectory|?
+ return HttpContext.Current.Request.MapPath (DataFile);
+ }
[BrowsableAttribute (false),
- DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
+ DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
public override string ConnectionString {
- get { return this.ConnectionString; }
- set { throw new InvalidOperationException
- ("The ConnectionString is automatically generated for AccessDataSource and hence cannot be set.");
+ get {
+ if (connectionString == null) {
+ connectionString = String.Concat ("Provider=", PROVIDER_STRING, "; Data Source=", GetPhysicalDataFilePath ());
+ }
+
+ return connectionString;
+ }
+ set {
+ throw new InvalidOperationException
+ ("The ConnectionString is automatically generated for AccessDataSource and hence cannot be set.");
}
}
- [UrlPropertyAttribute (), DefaultValueAttribute (""),
- WebCategoryAttribute ("Data"),
- WebSysDescriptionAttribute ("MS Office Access database file name"),
- EditorAttribute ("System.Web.UI.Design.MdbDataFileEditor, System.Design",
- "System.Drawing.Design.UITypeEditor, System.Drawing")]
+ [UrlPropertyAttribute]
+ [DefaultValueAttribute ("")]
+ [WebCategoryAttribute ("Data")]
+ [WebSysDescriptionAttribute ("MS Office Access database file name")]
+ [EditorAttribute ("System.Web.UI.Design.MdbDataFileEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
public string DataFile {
- get { return dataFile; }
- set { dataFile = value; }
- //After setting dataFile, connectionString gets recreated
- //On accessing ConnectionString, MS.Net throws NullReferenceException
- //Need to dig more on this.
+ get { return ViewState.GetString ("DataFile", ""); }
+ set {
+ ViewState ["DataFile"] = value;
+ connectionString = null;
+ }
}
[BrowsableAttribute (false),
DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
public override string ProviderName {
- get { return this.ProviderName; }
+ get { return base.ProviderName; }
set { throw new InvalidOperationException
("Setting ProviderName on an AccessDataSource is not allowed");
}