| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- //
- // System.Data.SqlClient.SqlCommand.cs
- //
- // Author:
- // Rodrigo Moya ([email protected])
- // Daniel Morgan ([email protected])
- // Tim Coleman ([email protected])
- //
- // (C) Ximian, Inc 2002 http://www.ximian.com/
- // (C) Daniel Morgan, 2002
- // Copyright (C) Tim Coleman, 2002
- //
- using Mono.Data.TdsClient.Internal;
- using System;
- using System.Collections;
- using System.ComponentModel;
- using System.Data;
- using System.Data.Common;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Xml;
- namespace System.Data.SqlClient {
- public sealed class SqlCommand : Component, IDbCommand, ICloneable
- {
- #region Fields
- int commandTimeout;
- bool designTimeVisible;
- string commandText;
- CommandType commandType;
- SqlConnection connection;
- SqlTransaction transaction;
- SqlParameterCollection parameters = new SqlParameterCollection ();
- // SqlDataReader state data for ExecuteReader()
- private SqlDataReader dataReader = null;
- private string[] queries = null;
- private int currentQuery = -1;
- private CommandBehavior cmdBehavior = CommandBehavior.Default;
- #endregion // Fields
- #region Constructors
- public SqlCommand()
- : this (String.Empty, null, null)
- {
- }
- public SqlCommand (string commandText)
- : this (commandText, null, null)
- {
- commandText = commandText;
- }
- public SqlCommand (string commandText, SqlConnection connection)
- : this (commandText, connection, null)
- {
- Connection = connection;
- }
- public SqlCommand (string commandText, SqlConnection connection, SqlTransaction transaction)
- {
- this.commandText = commandText;
- this.connection = connection;
- this.transaction = transaction;
- this.commandType = CommandType.Text;
- this.designTimeVisible = false;
- this.commandTimeout = 30;
- }
- #endregion // Constructors
- #region Properties
- public string CommandText {
- get { return CommandText; }
- set { commandText = value; }
- }
- public int CommandTimeout {
- get { return commandTimeout; }
- set {
- if (commandTimeout < 0)
- throw new ArgumentException ("The property value assigned is less than 0.");
- commandTimeout = value;
- }
- }
- public CommandType CommandType {
- get { return commandType; }
- [MonoTODO ("Validate")]
- set { commandType = value; }
- }
- public SqlConnection Connection {
- get { return connection; }
- set {
- if (transaction != null && connection.Transaction != null && connection.Transaction.IsOpen)
- throw new InvalidOperationException ("The Connection property was changed while a transaction was in progress.");
- transaction = null;
- connection = value;
- }
- }
- public bool DesignTimeVisible {
- get { return designTimeVisible; }
- set { designTimeVisible = value; }
- }
- public SqlParameterCollection Parameters {
- get { return parameters; }
- }
- internal ITds Tds {
- get { return connection.Tds; }
- }
- IDbConnection IDbCommand.Connection {
- get { return Connection; }
- set {
- if (!(value is SqlConnection))
- throw new InvalidCastException ("The value was not a valid SqlConnection.");
- Connection = (SqlConnection) value;
- }
- }
- IDataParameterCollection IDbCommand.Parameters {
- get { return Parameters; }
- }
- IDbTransaction IDbCommand.Transaction {
- get { return Transaction; }
- set {
- if (!(value is SqlTransaction))
- throw new ArgumentException ();
- Transaction = (SqlTransaction) value;
- }
- }
- public SqlTransaction Transaction {
- get { return transaction; }
- set { transaction = value; }
- }
- [MonoTODO]
- public UpdateRowSource UpdatedRowSource {
- get { throw new NotImplementedException (); }
- set { throw new NotImplementedException (); }
- }
- #endregion // Fields
- #region Methods
- public void Cancel ()
- {
- if (connection == null || connection.Tds == null)
- return;
- connection.Tds.Cancel ();
- }
- public SqlParameter CreateParameter ()
- {
- return new SqlParameter ();
- }
- public int ExecuteNonQuery ()
- {
- if (connection == null)
- throw new InvalidOperationException ("ExecuteNonQuery requires a Connection object to continue.");
- if (connection.Transaction != null && transaction != connection.Transaction)
- throw new InvalidOperationException ("The Connection object does not have the same transaction as the command object.");
- if (connection.State != ConnectionState.Open)
- throw new InvalidOperationException ("ExecuteNonQuery requires an open Connection object to continue. This connection is closed.");
- if (commandText == String.Empty || commandText == null)
- throw new InvalidOperationException ("The command text for this Command has not been set.");
- return connection.Tds.ExecuteNonQuery (FormatQuery (commandText, commandType));
- }
- public SqlDataReader ExecuteReader ()
- {
- return ExecuteReader (CommandBehavior.Default);
- }
- public SqlDataReader ExecuteReader (CommandBehavior behavior)
- {
- if (connection == null)
- throw new InvalidOperationException ("ExecuteReader requires a Connection object to continue.");
- if (connection.Transaction != null && transaction != connection.Transaction)
- throw new InvalidOperationException ("The Connection object does not have the same transaction as the command object.");
- if (connection.State != ConnectionState.Open)
- throw new InvalidOperationException ("ExecuteReader requires an open Connection object to continue. This connection is closed.");
- if (commandText == String.Empty || commandText == null)
- throw new InvalidOperationException ("The command text for this Command has not been set.");
- connection.Tds.ExecuteQuery (FormatQuery (commandText, commandType));
- connection.DataReaderOpen = true;
- return new SqlDataReader (this);
- }
- [MonoTODO]
- public object ExecuteScalar ()
- {
- throw new NotImplementedException ();
- }
- [MonoTODO]
- public XmlReader ExecuteXmlReader ()
- {
- throw new NotImplementedException ();
- }
- static string FormatQuery (string commandText, CommandType commandType)
- {
- switch (commandType) {
- case CommandType.Text :
- return commandText;
- case CommandType.TableDirect :
- return String.Format ("SELECT * FROM {0}", commandText);
- case CommandType.StoredProcedure :
- return String.Format ("EXEC {0}", commandText);
- default:
- throw new InvalidOperationException ("The CommandType was not recognized.");
- }
- }
- [MonoTODO]
- object ICloneable.Clone ()
- {
- throw new NotImplementedException ();
- }
- IDbDataParameter IDbCommand.CreateParameter ()
- {
- return CreateParameter ();
- }
- IDataReader IDbCommand.ExecuteReader ()
- {
- return ExecuteReader ();
- }
- IDataReader IDbCommand.ExecuteReader (CommandBehavior behavior)
- {
- return ExecuteReader (behavior);
- }
- void IDisposable.Dispose ()
- {
- Dispose (true);
- }
- [MonoTODO]
- public void Prepare ()
- {
- throw new NotImplementedException ();
- }
- public void ResetCommandTimeout ()
- {
- commandTimeout = 30;
- }
- #endregion // Methods
- }
- }
|