SqlCommandBuilder.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / Data / System / Data / SqlClient / SqlCommandBuilder.cs / 1 / 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;
 
#if WINFSInternalOnly
    internal 
#else 
    public
#endif 
    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
                object initialReliabilitySlotValue = Thread.GetData(TdsParser.ReliabilitySlot); 
                RuntimeHelpers.PrepareConstrainedRegions();
                try { 
                    Thread.SetData(TdsParser.ReliabilitySlot, true); 
#endif
                    bestEffortCleanupTarget = SqlInternalConnection.GetBestEffortCleanupTarget(command.Connection); 
                    command.DeriveParameters();
#if DEBUG
                }
                finally { 
                    Thread.SetData(TdsParser.ReliabilitySlot, initialReliabilitySlotValue);
                } 
#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;
 
#if WINFSInternalOnly
    internal 
#else 
    public
#endif 
    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
                object initialReliabilitySlotValue = Thread.GetData(TdsParser.ReliabilitySlot); 
                RuntimeHelpers.PrepareConstrainedRegions();
                try { 
                    Thread.SetData(TdsParser.ReliabilitySlot, true); 
#endif
                    bestEffortCleanupTarget = SqlInternalConnection.GetBestEffortCleanupTarget(command.Connection); 
                    command.DeriveParameters();
#if DEBUG
                }
                finally { 
                    Thread.SetData(TdsParser.ReliabilitySlot, initialReliabilitySlotValue);
                } 
#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

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK