Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / WebForms / System / Web / UI / Design / WebControls / SqlDataSourceQueryEditorForm.cs / 1 / SqlDataSourceQueryEditorForm.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.UI.Design.WebControls {
using System;
using System.ComponentModel.Design.Data;
using System.Data;
using System.Data.Common;
using System.Design;
using System.Diagnostics;
using System.Drawing;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Globalization;
using System.Web.UI.Design.Util;
using System.Web.UI.Design.WebControls;
using System.Web.UI.WebControls;
using System.Windows.Forms;
///
/// Query editor for SqlDataSource queries.
/// Enables a user to edit query commands and add/remove and infer parameters.
///
internal class SqlDataSourceQueryEditorForm : DesignerForm {
private System.Windows.Forms.Label _commandLabel;
private System.Windows.Forms.TextBox _commandTextBox;
private ParameterEditorUserControl _parameterEditorUserControl;
private System.Windows.Forms.Button _okButton;
private System.Windows.Forms.Button _cancelButton;
private System.Windows.Forms.Button _inferParametersButton;
private System.Windows.Forms.Button _queryBuilderButton;
private QueryBuilderMode _queryBuilderMode;
private IDataEnvironment _dataEnvironment;
private SqlDataSourceCommandType _commandType;
private DesignerDataConnection _dataConnection;
private IList _originalParameters;
private SqlDataSourceDesigner _sqlDataSourceDesigner;
///
/// Create a new instance of SqlDataSourceQueryEditorForm using a given
/// connection string, command type (Select/Insert/etc.), command text,
/// and a list of parameters.
/// The connection string can be null (this is the case for AccessDataSource
/// when the MDB file does not exist or cannot be mapped to a local file).
///
public SqlDataSourceQueryEditorForm(IServiceProvider serviceProvider, SqlDataSourceDesigner sqlDataSourceDesigner,
string providerName, string connectionString,
DataSourceOperation operation, SqlDataSourceCommandType commandType, string command, IList originalParameters) : base(serviceProvider) {
Debug.Assert(sqlDataSourceDesigner != null);
_sqlDataSourceDesigner = sqlDataSourceDesigner;
InitializeComponent();
InitializeUI();
if (String.IsNullOrEmpty(providerName)) {
providerName = SqlDataSourceDesigner.DefaultProviderName;
}
_dataConnection = new DesignerDataConnection(String.Empty, providerName, connectionString);
_commandType = commandType;
_commandTextBox.Text = command;
_originalParameters = originalParameters;
string operationText = Enum.GetName(typeof(DataSourceOperation), operation).ToUpperInvariant();
_commandLabel.Text = SR.GetString(SR.SqlDataSourceQueryEditorForm_CommandLabel, operationText);
ArrayList parameterList = new ArrayList(originalParameters.Count);
sqlDataSourceDesigner.CopyList(originalParameters, parameterList);
_parameterEditorUserControl.AddParameters((Parameter[])parameterList.ToArray(typeof(Parameter)));
_commandTextBox.Select(0, 0);
// Set the mode for the query builder
switch (operation) {
case DataSourceOperation.Delete:
_queryBuilderMode = QueryBuilderMode.Delete;
break;
case DataSourceOperation.Insert:
_queryBuilderMode = QueryBuilderMode.Insert;
break;
case DataSourceOperation.Select:
_queryBuilderMode = QueryBuilderMode.Select;
break;
case DataSourceOperation.Update:
_queryBuilderMode = QueryBuilderMode.Update;
break;
default:
Debug.Fail("Invalid DataSourceOperation");
break;
}
}
///
/// The command text that is in the command textbox.
///
public string Command {
get {
return _commandTextBox.Text;
}
}
protected override string HelpTopic {
get {
return "net.Asp.SqlDataSource.QueryEditor";
}
}
#region Windows Form Designer generated code
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
private void InitializeComponent() {
_okButton = new System.Windows.Forms.Button();
_cancelButton = new System.Windows.Forms.Button();
_inferParametersButton = new System.Windows.Forms.Button();
_queryBuilderButton = new System.Windows.Forms.Button();
_commandLabel = new System.Windows.Forms.Label();
_commandTextBox = new System.Windows.Forms.TextBox();
_parameterEditorUserControl = new ParameterEditorUserControl(ServiceProvider, (SqlDataSource)_sqlDataSourceDesigner.Component);
SuspendLayout();
//
// okButton
//
_okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
_okButton.Location = new System.Drawing.Point(377, 379);
_okButton.TabIndex = 150;
_okButton.Click += new System.EventHandler(OnOkButtonClick);
//
// cancelButton
//
_cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
_cancelButton.Location = new System.Drawing.Point(457, 379);
_cancelButton.TabIndex = 160;
_cancelButton.Click += new System.EventHandler(OnCancelButtonClick);
//
// _commandLabel
//
_commandLabel.Location = new System.Drawing.Point(12, 12);
_commandLabel.Size = new System.Drawing.Size(200, 16);
_commandLabel.TabIndex = 10;
//
// _commandTextBox
//
_commandTextBox.AcceptsReturn = true;
_commandTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
_commandTextBox.Location = new System.Drawing.Point(12, 30);
_commandTextBox.Multiline = true;
_commandTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
_commandTextBox.Size = new System.Drawing.Size(520, 78);
_commandTextBox.TabIndex = 20;
//
// inferParametersButton
//
_inferParametersButton.AutoSize = true;
_inferParametersButton.Location = new System.Drawing.Point(12, 112);
_inferParametersButton.Size = new System.Drawing.Size(128, 23);
_inferParametersButton.TabIndex = 30;
_inferParametersButton.Click += new System.EventHandler(OnInferParametersButtonClick);
//
// queryBuilderButton
//
_queryBuilderButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
_queryBuilderButton.AutoSize = true;
_queryBuilderButton.Location = new System.Drawing.Point(404, 112);
_queryBuilderButton.Size = new System.Drawing.Size(128, 23);
_queryBuilderButton.TabIndex = 40;
_queryBuilderButton.Click += new System.EventHandler(OnQueryBuilderButtonClick);
//
// _parameterEditorUserControl
//
_parameterEditorUserControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));
_parameterEditorUserControl.Location = new System.Drawing.Point(12, 144);
_parameterEditorUserControl.Size = new System.Drawing.Size(520, 224);
_parameterEditorUserControl.TabIndex = 50;
//
// CommandEditorForm
//
AcceptButton = _okButton;
CancelButton = _cancelButton;
ClientSize = new System.Drawing.Size(544, 410);
Controls.Add(_queryBuilderButton);
Controls.Add(_inferParametersButton);
Controls.Add(_commandTextBox);
Controls.Add(_commandLabel);
Controls.Add(_cancelButton);
Controls.Add(_okButton);
Controls.Add(_parameterEditorUserControl);
MinimumSize = new System.Drawing.Size(488, 440);
InitializeForm();
ResumeLayout(false);
}
#endregion
///
/// Called after InitializeComponent to perform additional actions that
/// are not supported by the designer.
///
private void InitializeUI() {
_okButton.Text = SR.GetString(SR.OK);
_cancelButton.Text = SR.GetString(SR.Cancel);
_inferParametersButton.Text = SR.GetString(SR.SqlDataSourceQueryEditorForm_InferParametersButton);
_queryBuilderButton.Text = SR.GetString(SR.SqlDataSourceQueryEditorForm_QueryBuilderButton);
Text = SR.GetString(SR.SqlDataSourceQueryEditorForm_Caption);
// Disable query builder button if the service is not available
_dataEnvironment = (IDataEnvironment)ServiceProvider.GetService(typeof(IDataEnvironment));
_queryBuilderButton.Enabled = (_dataEnvironment != null);
}
///
/// The Click event handler for the Cancel button.
///
private void OnCancelButtonClick(System.Object sender, System.EventArgs e) {
DialogResult = DialogResult.Cancel;
Close();
}
///
/// The Click event handler for the Infer Parameters button.
///
private void OnInferParametersButtonClick(System.Object sender, System.EventArgs e) {
// Don't do anything if there is no command set
if (_commandTextBox.Text.Trim().Length == 0) {
UIServiceHelper.ShowError(ServiceProvider, SR.GetString(SR.SqlDataSourceQueryEditorForm_InferNeedsCommand));
return;
}
Parameter[] derivedParameters = _sqlDataSourceDesigner.InferParameterNames(_dataConnection, _commandTextBox.Text, _commandType);
if (derivedParameters != null) {
// Get a list of all the names currently used by parameters (including duplicates)
Parameter[] currentParameters = _parameterEditorUserControl.GetParameters();
StringCollection currentNames = new StringCollection();
foreach (Parameter parameter in currentParameters) {
currentNames.Add(parameter.Name);
}
// Go through the list of derived parameters and only pick out the ones that do not already exist
bool supportsNamedParameters = true;
try {
DbProviderFactory factory = SqlDataSourceDesigner.GetDbProviderFactory(_dataConnection.ProviderName);
supportsNamedParameters = SqlDataSourceDesigner.SupportsNamedParameters(factory);
}
catch {
// In case there's an unsupported provider we just assume it supports named parameters (pretty optimistic)
}
if (supportsNamedParameters) {
// Named parameters are supported, so add new uniquely named parameters
List derivedParametersToAdd = new List();
foreach (Parameter derivedParameter in derivedParameters) {
if (!currentNames.Contains(derivedParameter.Name)) {
derivedParametersToAdd.Add(derivedParameter);
}
else {
currentNames.Remove(derivedParameter.Name);
}
}
_parameterEditorUserControl.AddParameters(derivedParametersToAdd.ToArray());
}
else {
// Named parameters are not supported, so add new parameters based on index and direction
List remainingDerivedParameters = new List();
foreach (Parameter p in derivedParameters) {
remainingDerivedParameters.Add(p);
}
// Go through all the current parameters and remove matching one from the new derived parameters
foreach (Parameter currentParameter in currentParameters) {
Parameter foundParameter = null;
foreach (Parameter remainingParameter in remainingDerivedParameters) {
if (remainingParameter.Direction == currentParameter.Direction) {
foundParameter = remainingParameter;
break;
}
}
if (foundParameter != null) {
remainingDerivedParameters.Remove(foundParameter);
}
}
// Then add all the remaining derived parameters to the list
_parameterEditorUserControl.AddParameters(remainingDerivedParameters.ToArray());
}
}
}
///
/// The Click event handler for the OK button.
///
private void OnOkButtonClick(System.Object sender, System.EventArgs e) {
_sqlDataSourceDesigner.CopyList(_parameterEditorUserControl.GetParameters(), _originalParameters);
DialogResult = DialogResult.OK;
Close();
}
///
/// Launch the query builder.
///
private void OnQueryBuilderButtonClick(System.Object sender, System.EventArgs e) {
if ((_dataConnection.ConnectionString == null) || (_dataConnection.ConnectionString.Trim().Length == 0)) {
UIServiceHelper.ShowError(ServiceProvider, SR.GetString(SR.SqlDataSourceQueryEditorForm_QueryBuilderNeedsConnectionString));
return;
}
// Launch query builder
Debug.Assert(_dataEnvironment != null);
string newQuery = _dataEnvironment.BuildQuery(this, _dataConnection, _queryBuilderMode, _commandTextBox.Text);
if ((newQuery != null) && (newQuery.Length > 0)) {
_commandTextBox.Text = newQuery;
}
_commandTextBox.Focus();
_commandTextBox.Select(0, 0);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- _Semaphore.cs
- ContentDefinition.cs
- WindowsTooltip.cs
- NodeFunctions.cs
- XMLDiffLoader.cs
- HttpMethodAttribute.cs
- AttributeEmitter.cs
- ValueQuery.cs
- MappingItemCollection.cs
- CapabilitiesPattern.cs
- _TimerThread.cs
- HostingEnvironment.cs
- Lazy.cs
- X509CertificateClaimSet.cs
- OdbcErrorCollection.cs
- DSACryptoServiceProvider.cs
- WindowsFormsSynchronizationContext.cs
- DataGridViewToolTip.cs
- CodeIterationStatement.cs
- StatusBarAutomationPeer.cs
- XPathChildIterator.cs
- MetadataSerializer.cs
- SingleResultAttribute.cs
- StorageEndPropertyMapping.cs
- ApplicationSecurityInfo.cs
- ListCollectionView.cs
- MouseGesture.cs
- PathGradientBrush.cs
- DataAccessException.cs
- ConnectionOrientedTransportChannelFactory.cs
- ConsoleCancelEventArgs.cs
- ConfigPathUtility.cs
- UxThemeWrapper.cs
- RelatedCurrencyManager.cs
- QueryOperationResponseOfT.cs
- JavaScriptString.cs
- _SecureChannel.cs
- _LoggingObject.cs
- SafeRightsManagementHandle.cs
- SHA512Managed.cs
- RankException.cs
- CodeTypeConstructor.cs
- Control.cs
- TypeExtensionConverter.cs
- WindowsEditBoxRange.cs
- MonitorWrapper.cs
- InstanceValue.cs
- GifBitmapEncoder.cs
- StringUtil.cs
- RemotingException.cs
- ReadOnlyCollection.cs
- ShutDownListener.cs
- XmlFormatExtensionAttribute.cs
- ClientRolePrincipal.cs
- CurrentChangedEventManager.cs
- StateDesigner.LayoutSelectionGlyph.cs
- UIElement3DAutomationPeer.cs
- _BasicClient.cs
- SqlConnection.cs
- CodeDomDesignerLoader.cs
- IPAddressCollection.cs
- HttpNamespaceReservationInstallComponent.cs
- WebBrowserSiteBase.cs
- WhereQueryOperator.cs
- FontSizeConverter.cs
- FieldReference.cs
- TextEmbeddedObject.cs
- BooleanStorage.cs
- InvalidDataException.cs
- BufferAllocator.cs
- Label.cs
- EncodingDataItem.cs
- XmlComplianceUtil.cs
- TargetInvocationException.cs
- CompositionCommandSet.cs
- ImagingCache.cs
- SqlCharStream.cs
- RequestCachingSection.cs
- SqlConnectionPoolProviderInfo.cs
- Publisher.cs
- SQLDouble.cs
- TagNameToTypeMapper.cs
- BuildResult.cs
- RegistryPermission.cs
- DataControlFieldCell.cs
- ExtenderProvidedPropertyAttribute.cs
- TextServicesCompartment.cs
- HierarchicalDataBoundControlAdapter.cs
- IImplicitResourceProvider.cs
- WebPartConnectionsEventArgs.cs
- CalculatedColumn.cs
- MarkupExtensionReturnTypeAttribute.cs
- CompensationTokenData.cs
- securitycriticaldataformultiplegetandset.cs
- WeakRefEnumerator.cs
- RTLAwareMessageBox.cs
- InputLanguageProfileNotifySink.cs
- Rotation3DKeyFrameCollection.cs
- LineBreak.cs
- GlyphTypeface.cs