Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Data / System / Data / SqlClient / SqlCommandBuilder.cs / 1305376 / SqlCommandBuilder.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data.SqlClient { using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Data.Common; using System.Data.Sql; using System.Data.SqlTypes; using System.Diagnostics; using System.Globalization; using System.Text; using System.Runtime.CompilerServices; using System.Threading; public sealed class SqlCommandBuilder : DbCommandBuilder { public SqlCommandBuilder() : base() { GC.SuppressFinalize(this); base.QuotePrefix = "["; // initialize base with defaults base.QuoteSuffix = "]"; } public SqlCommandBuilder(SqlDataAdapter adapter) : this() { DataAdapter = adapter; } ///SqlServer only supports CatalogLocation.Start [ Browsable(false), EditorBrowsableAttribute(EditorBrowsableState.Never) , DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public override CatalogLocation CatalogLocation { get { return CatalogLocation.Start; } set { if (CatalogLocation.Start != value) { throw ADP.SingleValuedProperty("CatalogLocation", "Start"); } } } ///SqlServer only supports '.' [ Browsable(false), EditorBrowsableAttribute(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public override string CatalogSeparator { get { return "."; } set { if ("." != value) { throw ADP.SingleValuedProperty("CatalogSeparator", "."); } } } [ DefaultValue(null), ResCategoryAttribute(Res.DataCategory_Update), ResDescriptionAttribute(Res.SqlCommandBuilder_DataAdapter), // MDAC 60524 ] new public SqlDataAdapter DataAdapter { get { return (SqlDataAdapter)base.DataAdapter; } set { base.DataAdapter = value; } } ///SqlServer only supports '.' [ Browsable(false), EditorBrowsableAttribute(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public override string QuotePrefix { get { return base.QuotePrefix; } set { if (("[" != value) && ("\"" != value)){ throw ADP.DoubleValuedProperty("QuotePrefix", "[", "\""); } base.QuotePrefix = value; } } [ Browsable(false), EditorBrowsableAttribute(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public override string QuoteSuffix { get { return base.QuoteSuffix; } set { if (("]" != value) && ("\"" != value)) { throw ADP.DoubleValuedProperty("QuoteSuffix", "]", "\""); } base.QuoteSuffix = value; } } [ Browsable(false), EditorBrowsableAttribute(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public override string SchemaSeparator { get { return "."; } set { if ("." != value) { throw ADP.SingleValuedProperty("SchemaSeparator","."); } } } private void SqlRowUpdatingHandler(object sender, SqlRowUpdatingEventArgs ruevent) { base.RowUpdatingHandler(ruevent); } new public SqlCommand GetInsertCommand() { return (SqlCommand) base.GetInsertCommand(); } new public SqlCommand GetInsertCommand(bool useColumnsForParameterNames) { return (SqlCommand) base.GetInsertCommand(useColumnsForParameterNames); } new public SqlCommand GetUpdateCommand() { return (SqlCommand) base.GetUpdateCommand(); } new public SqlCommand GetUpdateCommand(bool useColumnsForParameterNames) { return (SqlCommand) base.GetUpdateCommand(useColumnsForParameterNames); } new public SqlCommand GetDeleteCommand() { return (SqlCommand) base.GetDeleteCommand(); } new public SqlCommand GetDeleteCommand(bool useColumnsForParameterNames) { return (SqlCommand) base.GetDeleteCommand(useColumnsForParameterNames); } override protected void ApplyParameterInfo(DbParameter parameter, DataRow datarow, StatementType statementType, bool whereClause) { SqlParameter p = (SqlParameter) parameter; object valueType = datarow[SchemaTableColumn.ProviderType]; p.SqlDbType = (SqlDbType) valueType; p.Offset = 0; if ((p.SqlDbType == SqlDbType.Udt) && !p.SourceColumnNullMapping) { p.UdtTypeName = datarow["DataTypeName"] as string; } else { p.UdtTypeName = String.Empty; } object bvalue = datarow[SchemaTableColumn.NumericPrecision]; if (DBNull.Value != bvalue) { byte bval = (byte)(short)bvalue; p.PrecisionInternal = ((0xff != bval) ? bval : (byte)0); } bvalue = datarow[SchemaTableColumn.NumericScale]; if (DBNull.Value != bvalue) { byte bval = (byte)(short)bvalue; p.ScaleInternal = ((0xff != bval) ? bval : (byte)0); } } override protected string GetParameterName(int parameterOrdinal) { return "@p" + parameterOrdinal.ToString(System.Globalization.CultureInfo.InvariantCulture); } override protected string GetParameterName(string parameterName) { return "@" + parameterName; } override protected string GetParameterPlaceholder(int parameterOrdinal) { return "@p" + parameterOrdinal.ToString(System.Globalization.CultureInfo.InvariantCulture); } private void ConsistentQuoteDelimiters(string quotePrefix, string quoteSuffix){ Debug.Assert(quotePrefix == "\"" || quotePrefix == "["); if ((("\"" == quotePrefix) && ("\"" != quoteSuffix)) || (("[" == quotePrefix) && ("]" != quoteSuffix))) { throw ADP.InvalidPrefixSuffix(); } } static public void DeriveParameters(SqlCommand command) { // MDAC 65927\ SqlConnection.ExecutePermission.Demand(); if (null == command) { throw ADP.ArgumentNull("command"); } SNIHandle bestEffortCleanupTarget = null; RuntimeHelpers.PrepareConstrainedRegions(); try { #if DEBUG TdsParser.ReliabilitySection tdsReliabilitySection = new TdsParser.ReliabilitySection(); RuntimeHelpers.PrepareConstrainedRegions(); try { tdsReliabilitySection.Start(); #else { #endif bestEffortCleanupTarget = SqlInternalConnection.GetBestEffortCleanupTarget(command.Connection); command.DeriveParameters(); } #if DEBUG finally { tdsReliabilitySection.Stop(); } #endif } catch (System.OutOfMemoryException e) { if (null != command && null != command.Connection) { command.Connection.Abort(e); } throw; } catch (System.StackOverflowException e) { if (null != command && null != command.Connection) { command.Connection.Abort(e); } throw; } catch (System.Threading.ThreadAbortException e) { if (null != command && null != command.Connection) { command.Connection.Abort(e); } SqlInternalConnection.BestEffortCleanup(bestEffortCleanupTarget); throw; } } /* private static void GetLiteralInfo (DataRow dataTypeRow, out string literalPrefix, out string literalSuffix) { Object tempValue = dataTypeRow[DbMetaDataColumnNames.LiteralPrefix]; if (tempValue == DBNull.Value) { literalPrefix = ""; } else { literalPrefix = (string)dataTypeRow[DbMetaDataColumnNames.LiteralPrefix]; } tempValue = dataTypeRow[DbMetaDataColumnNames.LiteralSuffix]; if (tempValue == DBNull.Value) { literalSuffix = ""; } else { literalSuffix = (string)dataTypeRow[DbMetaDataColumnNames.LiteralSuffix]; } } */ protected override DataTable GetSchemaTable (DbCommand srcCommand) { SqlCommand sqlCommand = srcCommand as SqlCommand; SqlNotificationRequest notificationRequest = sqlCommand.Notification; bool notificationAutoEnlist = sqlCommand.NotificationAutoEnlist; sqlCommand.Notification = null; sqlCommand.NotificationAutoEnlist = false; try { using (SqlDataReader dataReader = sqlCommand.ExecuteReader(CommandBehavior.SchemaOnly | CommandBehavior.KeyInfo)){ return dataReader.GetSchemaTable(); } } finally { sqlCommand.Notification = notificationRequest; sqlCommand.NotificationAutoEnlist = notificationAutoEnlist; } } protected override DbCommand InitializeCommand(DbCommand command) { SqlCommand cmd = (SqlCommand) base.InitializeCommand(command); cmd.NotificationAutoEnlist = false; return cmd; } public override string QuoteIdentifier(string unquotedIdentifier){ ADP.CheckArgumentNull(unquotedIdentifier, "unquotedIdentifier"); string quoteSuffixLocal = QuoteSuffix; string quotePrefixLocal = QuotePrefix; ConsistentQuoteDelimiters(quotePrefixLocal, quoteSuffixLocal); return ADP.BuildQuotedString(quotePrefixLocal,quoteSuffixLocal,unquotedIdentifier);; } override protected void SetRowUpdatingHandler(DbDataAdapter adapter) { Debug.Assert(adapter is SqlDataAdapter, "!SqlDataAdapter"); if (adapter == base.DataAdapter) { // removal case ((SqlDataAdapter)adapter).RowUpdating -= SqlRowUpdatingHandler; } else { // adding case ((SqlDataAdapter)adapter).RowUpdating += SqlRowUpdatingHandler; } } public override string UnquoteIdentifier(string quotedIdentifier){ ADP.CheckArgumentNull(quotedIdentifier, "quotedIdentifier"); String unquotedIdentifier; string quoteSuffixLocal = QuoteSuffix; string quotePrefixLocal = QuotePrefix; ConsistentQuoteDelimiters(quotePrefixLocal, quoteSuffixLocal); // ignoring the return value becasue an unquoted source string is OK here ADP.RemoveStringQuotes(quotePrefixLocal, quoteSuffixLocal, quotedIdentifier, out unquotedIdentifier); return unquotedIdentifier; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data.SqlClient { using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Data.Common; using System.Data.Sql; using System.Data.SqlTypes; using System.Diagnostics; using System.Globalization; using System.Text; using System.Runtime.CompilerServices; using System.Threading; public sealed class SqlCommandBuilder : DbCommandBuilder { public SqlCommandBuilder() : base() { GC.SuppressFinalize(this); base.QuotePrefix = "["; // initialize base with defaults base.QuoteSuffix = "]"; } public SqlCommandBuilder(SqlDataAdapter adapter) : this() { DataAdapter = adapter; } ///SqlServer only supports CatalogLocation.Start [ Browsable(false), EditorBrowsableAttribute(EditorBrowsableState.Never) , DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public override CatalogLocation CatalogLocation { get { return CatalogLocation.Start; } set { if (CatalogLocation.Start != value) { throw ADP.SingleValuedProperty("CatalogLocation", "Start"); } } } ///SqlServer only supports '.' [ Browsable(false), EditorBrowsableAttribute(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public override string CatalogSeparator { get { return "."; } set { if ("." != value) { throw ADP.SingleValuedProperty("CatalogSeparator", "."); } } } [ DefaultValue(null), ResCategoryAttribute(Res.DataCategory_Update), ResDescriptionAttribute(Res.SqlCommandBuilder_DataAdapter), // MDAC 60524 ] new public SqlDataAdapter DataAdapter { get { return (SqlDataAdapter)base.DataAdapter; } set { base.DataAdapter = value; } } ///SqlServer only supports '.' [ Browsable(false), EditorBrowsableAttribute(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public override string QuotePrefix { get { return base.QuotePrefix; } set { if (("[" != value) && ("\"" != value)){ throw ADP.DoubleValuedProperty("QuotePrefix", "[", "\""); } base.QuotePrefix = value; } } [ Browsable(false), EditorBrowsableAttribute(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public override string QuoteSuffix { get { return base.QuoteSuffix; } set { if (("]" != value) && ("\"" != value)) { throw ADP.DoubleValuedProperty("QuoteSuffix", "]", "\""); } base.QuoteSuffix = value; } } [ Browsable(false), EditorBrowsableAttribute(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ] public override string SchemaSeparator { get { return "."; } set { if ("." != value) { throw ADP.SingleValuedProperty("SchemaSeparator","."); } } } private void SqlRowUpdatingHandler(object sender, SqlRowUpdatingEventArgs ruevent) { base.RowUpdatingHandler(ruevent); } new public SqlCommand GetInsertCommand() { return (SqlCommand) base.GetInsertCommand(); } new public SqlCommand GetInsertCommand(bool useColumnsForParameterNames) { return (SqlCommand) base.GetInsertCommand(useColumnsForParameterNames); } new public SqlCommand GetUpdateCommand() { return (SqlCommand) base.GetUpdateCommand(); } new public SqlCommand GetUpdateCommand(bool useColumnsForParameterNames) { return (SqlCommand) base.GetUpdateCommand(useColumnsForParameterNames); } new public SqlCommand GetDeleteCommand() { return (SqlCommand) base.GetDeleteCommand(); } new public SqlCommand GetDeleteCommand(bool useColumnsForParameterNames) { return (SqlCommand) base.GetDeleteCommand(useColumnsForParameterNames); } override protected void ApplyParameterInfo(DbParameter parameter, DataRow datarow, StatementType statementType, bool whereClause) { SqlParameter p = (SqlParameter) parameter; object valueType = datarow[SchemaTableColumn.ProviderType]; p.SqlDbType = (SqlDbType) valueType; p.Offset = 0; if ((p.SqlDbType == SqlDbType.Udt) && !p.SourceColumnNullMapping) { p.UdtTypeName = datarow["DataTypeName"] as string; } else { p.UdtTypeName = String.Empty; } object bvalue = datarow[SchemaTableColumn.NumericPrecision]; if (DBNull.Value != bvalue) { byte bval = (byte)(short)bvalue; p.PrecisionInternal = ((0xff != bval) ? bval : (byte)0); } bvalue = datarow[SchemaTableColumn.NumericScale]; if (DBNull.Value != bvalue) { byte bval = (byte)(short)bvalue; p.ScaleInternal = ((0xff != bval) ? bval : (byte)0); } } override protected string GetParameterName(int parameterOrdinal) { return "@p" + parameterOrdinal.ToString(System.Globalization.CultureInfo.InvariantCulture); } override protected string GetParameterName(string parameterName) { return "@" + parameterName; } override protected string GetParameterPlaceholder(int parameterOrdinal) { return "@p" + parameterOrdinal.ToString(System.Globalization.CultureInfo.InvariantCulture); } private void ConsistentQuoteDelimiters(string quotePrefix, string quoteSuffix){ Debug.Assert(quotePrefix == "\"" || quotePrefix == "["); if ((("\"" == quotePrefix) && ("\"" != quoteSuffix)) || (("[" == quotePrefix) && ("]" != quoteSuffix))) { throw ADP.InvalidPrefixSuffix(); } } static public void DeriveParameters(SqlCommand command) { // MDAC 65927\ SqlConnection.ExecutePermission.Demand(); if (null == command) { throw ADP.ArgumentNull("command"); } SNIHandle bestEffortCleanupTarget = null; RuntimeHelpers.PrepareConstrainedRegions(); try { #if DEBUG TdsParser.ReliabilitySection tdsReliabilitySection = new TdsParser.ReliabilitySection(); RuntimeHelpers.PrepareConstrainedRegions(); try { tdsReliabilitySection.Start(); #else { #endif bestEffortCleanupTarget = SqlInternalConnection.GetBestEffortCleanupTarget(command.Connection); command.DeriveParameters(); } #if DEBUG finally { tdsReliabilitySection.Stop(); } #endif } catch (System.OutOfMemoryException e) { if (null != command && null != command.Connection) { command.Connection.Abort(e); } throw; } catch (System.StackOverflowException e) { if (null != command && null != command.Connection) { command.Connection.Abort(e); } throw; } catch (System.Threading.ThreadAbortException e) { if (null != command && null != command.Connection) { command.Connection.Abort(e); } SqlInternalConnection.BestEffortCleanup(bestEffortCleanupTarget); throw; } } /* private static void GetLiteralInfo (DataRow dataTypeRow, out string literalPrefix, out string literalSuffix) { Object tempValue = dataTypeRow[DbMetaDataColumnNames.LiteralPrefix]; if (tempValue == DBNull.Value) { literalPrefix = ""; } else { literalPrefix = (string)dataTypeRow[DbMetaDataColumnNames.LiteralPrefix]; } tempValue = dataTypeRow[DbMetaDataColumnNames.LiteralSuffix]; if (tempValue == DBNull.Value) { literalSuffix = ""; } else { literalSuffix = (string)dataTypeRow[DbMetaDataColumnNames.LiteralSuffix]; } } */ protected override DataTable GetSchemaTable (DbCommand srcCommand) { SqlCommand sqlCommand = srcCommand as SqlCommand; SqlNotificationRequest notificationRequest = sqlCommand.Notification; bool notificationAutoEnlist = sqlCommand.NotificationAutoEnlist; sqlCommand.Notification = null; sqlCommand.NotificationAutoEnlist = false; try { using (SqlDataReader dataReader = sqlCommand.ExecuteReader(CommandBehavior.SchemaOnly | CommandBehavior.KeyInfo)){ return dataReader.GetSchemaTable(); } } finally { sqlCommand.Notification = notificationRequest; sqlCommand.NotificationAutoEnlist = notificationAutoEnlist; } } protected override DbCommand InitializeCommand(DbCommand command) { SqlCommand cmd = (SqlCommand) base.InitializeCommand(command); cmd.NotificationAutoEnlist = false; return cmd; } public override string QuoteIdentifier(string unquotedIdentifier){ ADP.CheckArgumentNull(unquotedIdentifier, "unquotedIdentifier"); string quoteSuffixLocal = QuoteSuffix; string quotePrefixLocal = QuotePrefix; ConsistentQuoteDelimiters(quotePrefixLocal, quoteSuffixLocal); return ADP.BuildQuotedString(quotePrefixLocal,quoteSuffixLocal,unquotedIdentifier);; } override protected void SetRowUpdatingHandler(DbDataAdapter adapter) { Debug.Assert(adapter is SqlDataAdapter, "!SqlDataAdapter"); if (adapter == base.DataAdapter) { // removal case ((SqlDataAdapter)adapter).RowUpdating -= SqlRowUpdatingHandler; } else { // adding case ((SqlDataAdapter)adapter).RowUpdating += SqlRowUpdatingHandler; } } public override string UnquoteIdentifier(string quotedIdentifier){ ADP.CheckArgumentNull(quotedIdentifier, "quotedIdentifier"); String unquotedIdentifier; string quoteSuffixLocal = QuoteSuffix; string quotePrefixLocal = QuotePrefix; ConsistentQuoteDelimiters(quotePrefixLocal, quoteSuffixLocal); // ignoring the return value becasue an unquoted source string is OK here ADP.RemoveStringQuotes(quotePrefixLocal, quoteSuffixLocal, quotedIdentifier, out unquotedIdentifier); return unquotedIdentifier; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GeometryCombineModeValidation.cs
- OneWayChannelFactory.cs
- MenuItemBindingCollection.cs
- EditorZoneBase.cs
- DbTransaction.cs
- BufferedGraphicsContext.cs
- DigestTraceRecordHelper.cs
- prompt.cs
- ReferencedAssembly.cs
- TreeViewCancelEvent.cs
- DispatcherHookEventArgs.cs
- WpfSharedXamlSchemaContext.cs
- VisualStyleInformation.cs
- CodeConstructor.cs
- AuthorizationRule.cs
- TransformerInfoCollection.cs
- CommandLineParser.cs
- SqlProfileProvider.cs
- EnumerableRowCollectionExtensions.cs
- ObjectSet.cs
- _PooledStream.cs
- HandlerMappingMemo.cs
- InfiniteIntConverter.cs
- PlanCompiler.cs
- ArgumentElement.cs
- VersionedStreamOwner.cs
- SapiAttributeParser.cs
- SqlInternalConnectionTds.cs
- RootProfilePropertySettingsCollection.cs
- TypeSystem.cs
- XmlRawWriter.cs
- uribuilder.cs
- _HeaderInfo.cs
- DataStreamFromComStream.cs
- XamlVector3DCollectionSerializer.cs
- FontStretches.cs
- DiagnosticTraceRecords.cs
- ExtractCollection.cs
- PenLineJoinValidation.cs
- HorizontalAlignConverter.cs
- DataExpression.cs
- DataContract.cs
- Interlocked.cs
- MatrixTransform3D.cs
- BlockUIContainer.cs
- SessionEndingEventArgs.cs
- ParseNumbers.cs
- WorkflowElementDialog.cs
- SamlSecurityToken.cs
- DataSourceControl.cs
- HorizontalAlignConverter.cs
- PublisherMembershipCondition.cs
- NamespaceDisplay.xaml.cs
- dbdatarecord.cs
- HtmlTableRow.cs
- TrackingAnnotationCollection.cs
- PropertyGridView.cs
- CodeSpit.cs
- SolidBrush.cs
- FilterEventArgs.cs
- HighlightVisual.cs
- IgnoreDeviceFilterElement.cs
- RegexCode.cs
- DesignTableCollection.cs
- FacetDescriptionElement.cs
- FocusChangedEventArgs.cs
- CancellableEnumerable.cs
- WebPartDescription.cs
- SqlHelper.cs
- NullableDecimalAverageAggregationOperator.cs
- HttpHandlerAction.cs
- AuthorizationRule.cs
- RtfToken.cs
- SafeThreadHandle.cs
- ChannelFactoryBase.cs
- ChangeBlockUndoRecord.cs
- PageStatePersister.cs
- PackagePartCollection.cs
- IntranetCredentialPolicy.cs
- ExtenderControl.cs
- XmlSerializer.cs
- MediaTimeline.cs
- SByteStorage.cs
- UnknownBitmapDecoder.cs
- ElementsClipboardData.cs
- DaylightTime.cs
- CallSite.cs
- FormatterServices.cs
- ZipIOModeEnforcingStream.cs
- SemanticResultValue.cs
- WindowsSecurityToken.cs
- DataGridViewLayoutData.cs
- HtmlPanelAdapter.cs
- ListBox.cs
- TextPointer.cs
- ProxyAttribute.cs
- ChtmlTextWriter.cs
- Error.cs
- SoapIncludeAttribute.cs
- SapiRecognizer.cs