Example #1
0
            // Creates a new parameter for a value in this expression translator
            internal SharpHsqlParameter CreateParameter(object value, DbType dbType)
            {
                string parameterName = string.Concat("@p", parameterNameCount.ToString(CultureInfo.InvariantCulture));

                parameterNameCount++;
                SharpHsqlParameter parameter = new SharpHsqlParameter(parameterName, value);

                parameter.DbType = dbType;
                _parameters.Add(parameter);
                return(parameter);
            }
Example #2
0
        /// <summary>
        /// Creates a SharpHsqlParameter given a name, type, and direction
        /// </summary>
        internal static SharpHsqlParameter CreateSqlParameter(string name, TypeUsage type, ParameterMode mode, object value)
        {
            int?size;

            SharpHsqlParameter result = new SharpHsqlParameter(name, value);

            // .Direction
            ParameterDirection direction = MetadataHelpers.ParameterModeToParameterDirection(mode);

            if (result.Direction != direction)
            {
                result.Direction = direction;
            }

            // .Size and .DbType
            // output parameters are handled differently (we need to ensure there is space for return
            // values where the user has not given a specific Size/MaxLength)
            bool   isOutParam = mode != ParameterMode.In;
            DbType sqlDbType  = GetSqlDbType(type, isOutParam, out size);

            if (result.DbType != sqlDbType)
            {
                result.DbType = sqlDbType;
            }

            // Note that we overwrite 'facet' parameters where either the value is different or
            // there is an output parameter.
            if (size.HasValue && (isOutParam || result.Size != size.Value))
            {
                result.Size = size.Value;
            }

            // .IsNullable
            bool isNullable = MetadataHelpers.IsNullable(type);

            if (isOutParam || isNullable != result.IsNullable)
            {
                result.IsNullable = isNullable;
            }

            return(result);
        }
        /// <summary>
        /// Creates a SharpHsqlParameter given a name, type, and direction
        /// </summary>
        internal static SharpHsqlParameter CreateSqlParameter(string name, TypeUsage type, ParameterMode mode, object value)
        {
            int? size;

            SharpHsqlParameter result = new SharpHsqlParameter(name, value);

            // .Direction
            ParameterDirection direction = MetadataHelpers.ParameterModeToParameterDirection(mode);
            if (result.Direction != direction)
            {
                result.Direction = direction;
            }

            // .Size and .DbType
            // output parameters are handled differently (we need to ensure there is space for return
            // values where the user has not given a specific Size/MaxLength)
            bool isOutParam = mode != ParameterMode.In;
            DbType sqlDbType = GetSqlDbType(type, isOutParam, out size);
            if (result.DbType != sqlDbType)
            {
                result.DbType = sqlDbType;
            }

            // Note that we overwrite 'facet' parameters where either the value is different or
            // there is an output parameter.
            if (size.HasValue && (isOutParam || result.Size != size.Value))
            {
                result.Size = size.Value;
            }

            // .IsNullable
            bool isNullable = MetadataHelpers.IsNullable(type);
            if (isOutParam || isNullable != result.IsNullable)
            {
                result.IsNullable = isNullable;
            }

            return result;
        }
Example #4
0
        static void Main(string[] args)
        {
            SharpHsqlConnection conn = new SharpHsqlConnection("Initial Catalog=mytest;User Id=sa;Pwd=;");

            byte[] data        = new byte[] { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 };
            string base64photo = Convert.ToBase64String(data, 0, data.Length);

            try
            {
                conn.Open();

                SharpHsqlCommand cmd = new SharpHsqlCommand("", conn);

                int res;

                Console.Write("Create table (y/n)?");
                string create = Console.ReadLine();
                if (create.ToLower() == "y")
                {
                    cmd.CommandText = "DROP TABLE IF EXIST \"data\";CREATE TABLE \"data\" (\"id\" int NOT NULL PRIMARY KEY, \"MyObject\" OBJECT);";
                    res             = cmd.ExecuteNonQuery();

                    cmd.CommandText = "DROP TABLE IF EXIST \"clients\";CREATE TABLE \"clients\" (\"id\" int NOT NULL IDENTITY PRIMARY KEY, \"DoubleValue\" double, \"nombre\" char, \"photo\" varbinary, \"created\" date );";
                    res             = cmd.ExecuteNonQuery();

                    var tran = conn.BeginTransaction();

                    cmd = new SharpHsqlCommand("", conn);

                    for (int i = 0; i < 10; i++)
                    {
                        cmd.CommandText = "INSERT INTO \"clients\" (\"DoubleValue\", \"nombre\", \"photo\", \"created\") VALUES (1.1, 'NOMBRE" + i.ToString() + "', '" + base64photo + "', NOW() );";
                        res             = cmd.ExecuteNonQuery();
                        cmd.CommandText = "CALL IDENTITY();";
                        int id = (int)cmd.ExecuteScalar();
                        Console.WriteLine("Inserted id={0}", id);
                    }

                    cmd.CommandText = "DROP TABLE IF EXIST \"books\";CREATE TABLE \"books\" (\"id\" INT NOT NULL PRIMARY KEY, \"name\" char, \"author\" char, \"qty\" int, \"value\" numeric);";
                    res             = cmd.ExecuteNonQuery();

                    cmd.CommandText = "INSERT INTO \"books\" VALUES (1, 'Book000', 'Any', 1, 23.5);";
                    res             = cmd.ExecuteNonQuery();
                    cmd.CommandText = "INSERT INTO \"books\" VALUES (2, 'Book001', 'Andy', 2, 43.9);";
                    res             = cmd.ExecuteNonQuery();
                    cmd.CommandText = "INSERT INTO \"books\" VALUES (3, 'Book002', 'Andy', 3, 37.25);";
                    res             = cmd.ExecuteNonQuery();
                    tran.Commit();
                }

                Console.WriteLine();



                Console.Write("Do Bulk INSERTS (y/n)?");
                string bulk = Console.ReadLine();
                if (bulk.ToLower() == "y")
                {
                    var tran = conn.BeginTransaction();

                    cmd = new SharpHsqlCommand("", conn);

                    for (int i = 0; i < 1000; i++)
                    {
                        cmd.CommandText = "INSERT INTO \"clients\" (\"DoubleValue\", \"nombre\", \"photo\", \"created\") VALUES (1.1, 'NOMBRE" + i.ToString() + "', '" + base64photo + "', NOW() );";
                        res             = cmd.ExecuteNonQuery();
                    }

                    tran.Commit();

                    Console.WriteLine("Inserted 1000 new clients.");
                    Console.WriteLine();
                }

                cmd = new SharpHsqlCommand("", conn);

                cmd.CommandText = "SELECT \"clients\".\"id\", \"clients\".\"DoubleValue\", \"clients\".\"nombre\",  \"clients\".\"photo\", \"clients\".\"created\" FROM \"clients\" ORDER BY \"clients\".\"id\" ";
                IDataReader reader = cmd.ExecuteReader();

                byte[] photo = null;

                while (reader.Read())
                {
                    long len = reader.GetBytes(3, 0, null, 0, 0);
                    photo = new byte[len];
                    reader.GetBytes(3, 0, photo, 0, (int)len);
                    Console.WriteLine("id={0}, doubleValue={1}, nombre={2}, photo={3}, created={4}", reader.GetInt32(0), reader.GetDouble(1), reader.GetString(2), photo.Length, reader.GetDateTime(4).ToString("yyyy.MM.dd hh:mm:ss.fffffff"));
                }

                reader.Close();

                Console.WriteLine();

                cmd.CommandText = "SELECT * FROM \"books\"";
                reader          = cmd.ExecuteReader();

                while (reader.Read())
                {
                    Console.WriteLine("id={0}book={1},\tauthor={2},\tqty={3},\tvalue={4}", reader.GetInt32(0), reader.GetString(1), reader.GetString(2), reader.GetInt32(3), reader.GetDecimal(4));
                }

                Console.WriteLine();

                reader.Close();

                Console.WriteLine();

                cmd.CommandText = "SELECT * FROM \"books\" ORDER BY \"value\"";
                reader          = cmd.ExecuteReader();

                while (reader.Read())
                {
                    Console.WriteLine("id={0}book={1},\tauthor={2},\tqty={3},\tvalue={4}", reader.GetInt32(0), reader.GetString(1), reader.GetString(2), reader.GetInt32(3), reader.GetDecimal(4));
                }

                Console.WriteLine();

                reader.Close();

                Console.WriteLine();

                cmd.CommandText = "SELECT COUNT(*) as CNT, SUM(\"value\") FROM \"books\" WHERE \"author\" = 'Andy'";
                reader          = cmd.ExecuteReader();

                while (reader.Read())
                {
                    Console.WriteLine("count={0},\tvalue={1}", reader.GetInt32(0), reader.GetDecimal(1));
                }

                Console.WriteLine();

                reader.Close();

                cmd.CommandText = "SELECT \"name\", \"author\", SUM(\"value\") FROM \"books\" WHERE \"author\" = 'Andy' GROUP BY \"name\", \"author\";";
                reader          = cmd.ExecuteReader();

                while (reader.Read())
                {
                    Console.WriteLine("name={0},\tauthor={1},\tvalue={2}", reader.GetString(0), reader.GetString(1), reader.GetDecimal(2));
                }

                Console.WriteLine();

                reader.Close();

                cmd.CommandText = "SELECT \"name\", SUM(\"value\") FROM \"books\" WHERE \"author\" = 'Andy' GROUP BY \"name\";";
                reader          = cmd.ExecuteReader();

                while (reader.Read())
                {
                    Console.WriteLine("name={0},\tvalue={1}", reader.GetString(0), reader.GetDecimal(1));
                }

                Console.WriteLine();

                reader.Close();
                cmd.CommandText = "DELETE FROM \"clients\" WHERE \"clients\".\"id\" = 6;";
                res             = cmd.ExecuteNonQuery();

                Console.WriteLine();

                cmd.CommandText = "SELECT MAX(\"clients\".\"id\") FROM \"clients\";";
                object result = cmd.ExecuteScalar();
                if (result != null)
                {
                    res = (int)result;
                    Console.WriteLine("MAX=" + res);
                }

                cmd.CommandText = "SELECT SUM(\"clients\".\"id\") FROM \"clients\";";
                result          = cmd.ExecuteScalar();
                if (result != null)
                {
                    res = (int)result;
                    Console.WriteLine("SUM=" + res);
                }

                cmd.CommandText = "SELECT COUNT(\"clients\".\"id\") FROM \"clients\";";
                result          = cmd.ExecuteScalar();
                if (result != null)
                {
                    res = (int)result;
                    Console.WriteLine("COUNT=" + res);
                }

                cmd.CommandText = "SELECT AVG(\"clients\".\"id\") FROM \"clients\";";
                result          = cmd.ExecuteScalar();
                if (result != null)
                {
                    res = (int)result;
                    Console.WriteLine("AVG=" + res);
                }

                cmd.CommandText = "CALL ABS(-33.5632);";
                result          = cmd.ExecuteScalar();
                if (result != null)
                {
                    Double abs = (Double)result;
                    Console.WriteLine("ABS=" + abs);
                }

                cmd.CommandText = "CREATE ALIAS CALCRATE FOR \"ExternalFunction,ExternalFunction.Simple.calcrate\";";
                res             = cmd.ExecuteNonQuery();

                cmd.CommandText = "CREATE ALIAS EXTTAN FOR \"ExternalFunction,ExternalFunction.Simple.tan\";";
                res             = cmd.ExecuteNonQuery();

                cmd.CommandText = "CALL CALCRATE(100, 21);";
                Decimal rate = (Decimal)cmd.ExecuteScalar();
                Console.WriteLine("CALCRATE=" + rate);

                cmd.CommandText = "CALL EXTTAN(23.456);";
                Double tan = (Double)cmd.ExecuteScalar();
                Console.WriteLine("EXTTAN=" + tan);

                cmd.CommandText = "CALL SQRT(3);";
                Double sqrt = (Double)cmd.ExecuteScalar();
                Console.WriteLine("SQRT=" + sqrt);

                cmd.CommandText = "CALL SUBSTRING('0123456', 3, 2);";
                string subs = (String)cmd.ExecuteScalar();
                Console.WriteLine("SUBSTRING=" + subs);

                cmd.CommandText = "CALL ASCII('A');";
                int ascii = (int)cmd.ExecuteScalar();
                Console.WriteLine("ASCII=" + ascii);

                cmd.CommandText = "CALL USER();";
                string user = (string)cmd.ExecuteScalar();
                Console.WriteLine("USER="******"SELECT \"clients\".\"photo\" FROM \"clients\" WHERE \"clients\".\"id\" = 5;";
                byte[] b = (byte[])cmd.ExecuteScalar();

                cmd.CommandText = "SELECT \"clients\".\"id\", \"clients\".\"DoubleValue\", \"clients\".\"nombre\" FROM \"clients\" WHERE \"clients\".\"id\" = 5;";

                SharpHsqlDataAdapter adapter = new SharpHsqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                res     = adapter.Fill(ds);
                adapter = null;

                Console.WriteLine();
                Console.WriteLine("DataSet.Fill: " + ds.Tables[0].Rows.Count);

                cmd.CommandText = "DECLARE @MyVar CHAR;SET @MyVar = 'Andy';";
                cmd.ExecuteNonQuery();

                Console.WriteLine();
                cmd.CommandText = "SELECT @MyVar;";
                string var = (string)cmd.ExecuteScalar();
                Console.WriteLine("@MyVar=" + var);

                Console.WriteLine();

                cmd.CommandText = "SELECT \"name\", \"author\", SUM(\"value\") FROM \"books\" WHERE \"author\" = @MyVar GROUP BY \"name\", \"author\";";
                reader          = cmd.ExecuteReader();

                while (reader.Read())
                {
                    Console.WriteLine("name={0},\tauthor={1},\tvalue={2}", reader.GetString(0), reader.GetString(1), reader.GetDecimal(2));
                }

                Console.WriteLine();
                reader.Close();

                cmd.CommandText = "INSERT INTO \"clients\" (\"DoubleValue\", \"nombre\", \"photo\", \"created\") VALUES (1.1, @MyVar, '" + base64photo + "', NOW() );";
                res             = cmd.ExecuteNonQuery();
                cmd.CommandText = "DECLARE @MyId INT;SET @MyId = IDENTITY();";
                cmd.ExecuteNonQuery();
                cmd.CommandText = "SELECT @MyId;";
                int myid = (int)cmd.ExecuteScalar();
                Console.WriteLine("Inserted id={0}", myid);

                Console.WriteLine();

                cmd.CommandText = "SET @MyId = SELECT MAX(\"clients\".\"id\") + 1 FROM \"clients\";";
                cmd.ExecuteNonQuery();
                cmd.CommandText = "SELECT @MyId;";
                myid            = (int)cmd.ExecuteScalar();
                Console.WriteLine("Next id={0}", myid);

                Console.WriteLine();
                reader.Close();

                DateTime dt = DateTime.Now;

                cmd.CommandText = "INSERT INTO \"clients\" (\"DoubleValue\", \"nombre\", \"photo\", \"created\") VALUES (@DoubleValue, @nombre, @photo, @date );SET @Id = IDENTITY();";
                cmd.Parameters.Add(new SharpHsqlParameter("@Id", DbType.Int32, 0, ParameterDirection.Output, false, 0, 0, null, DataRowVersion.Current, null));
                cmd.Parameters.Add(new SharpHsqlParameter("@DoubleValue", DbType.Double, 0, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, 1.1));
                cmd.Parameters.Add(new SharpHsqlParameter("@nombre", DbType.String, 0, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, "Andrés"));
                cmd.Parameters.Add(new SharpHsqlParameter("@photo", DbType.Binary, 0, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, photo));
                cmd.Parameters.Add(new SharpHsqlParameter("@date", DbType.DateTime, 0, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, dt));
                res = cmd.ExecuteNonQuery();
                SharpHsqlParameter p = (SharpHsqlParameter)cmd.Parameters["@Id"];
                myid = (int)p.Value;
                Console.WriteLine("Inserted id={0}", myid);
                Console.WriteLine();

                cmd.Parameters.Clear();
                cmd.CommandText = "SELECT \"clients\".\"created\" FROM \"clients\" WHERE \"clients\".\"id\" = " + myid + ";";
                reader          = cmd.ExecuteReader();

                while (reader.Read())
                {
                    Console.WriteLine(String.Format("Dates are equal: {0}.", dt.Equals(reader.GetDateTime(0))));
                }

                Console.WriteLine();
                reader.Close();

                cmd.CommandText = "SHOW DATABASES;";
                reader          = cmd.ExecuteReader();

                for (int i = 0; i < reader.FieldCount; i++)
                {
                    Console.Write(reader.GetName(i));
                    Console.Write("\t");
                }
                Console.Write(Environment.NewLine);

                while (reader.Read())
                {
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        Console.Write(reader.GetValue(i).ToString());
                        Console.Write("\t");
                        Console.Write(Environment.NewLine);
                    }
                }

                Console.WriteLine();
                reader.Close();

                // Dataset Fill for SHOW DATABASES
                adapter = new SharpHsqlDataAdapter(cmd);
                ds      = new DataSet();
                res     = adapter.Fill(ds);
                adapter = null;

                Console.WriteLine();
                Console.WriteLine("DATABASES: " + ds.Tables[0].Rows.Count);

                Console.WriteLine();

                cmd.CommandText = "SHOW TABLES;";
                reader          = cmd.ExecuteReader();

                for (int i = 0; i < reader.FieldCount; i++)
                {
                    Console.Write(reader.GetName(i));
                    Console.Write("\t");
                }
                Console.Write(Environment.NewLine);

                while (reader.Read())
                {
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        Console.Write(reader.GetValue(i).ToString());
                        Console.Write("\t");
                        Console.Write(Environment.NewLine);
                    }
                }

                Console.WriteLine();
                reader.Close();

                // Dataset Fill for SHOW TABLES
                adapter = new SharpHsqlDataAdapter(cmd);
                ds      = new DataSet();
                res     = adapter.Fill(ds);
                adapter = null;

                Console.WriteLine();
                Console.WriteLine("TABLES: " + ds.Tables[0].Rows.Count);

                Hashtable myData = new Hashtable();
                myData.Add("1", "ONE");
                myData.Add("2", "TWO");
                myData.Add("3", "TREE");
                myData.Add("4", "FOUR");
                myData.Add("5", "FIVE");

                cmd.Parameters.Clear();
                cmd.CommandText = "DELETE FROM \"data\" WHERE \"id\" = 1;";
                res             = cmd.ExecuteNonQuery();

                cmd.Parameters.Clear();
                cmd.CommandText = "INSERT INTO \"data\" (\"id\", \"MyObject\") VALUES( @id, @MyObject);";
                cmd.Parameters.Add(new SharpHsqlParameter("@id", DbType.Int32, 0, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, 1));
                cmd.Parameters.Add(new SharpHsqlParameter("@MyObject", DbType.Object, 0, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, myData));
                res = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();


                cmd.CommandText = "SELECT \"data\".\"id\", \"data\".\"MyObject\" FROM \"data\";";
                reader          = cmd.ExecuteReader();
                Console.Write(Environment.NewLine);

                int       myId     = 0;
                Hashtable readData = null;
                while (reader.Read())
                {
                    myId     = reader.GetInt32(0);
                    readData = (Hashtable)reader.GetValue(1);
                }

                foreach (DictionaryEntry entry in readData)
                {
                    Console.WriteLine(String.Format("Key: {0}, Value: {1}", entry.Key.ToString(), entry.Value.ToString()));
                }


                Console.WriteLine();
                reader.Close();

                cmd.CommandText = "SHOW ALIAS;";
                reader          = cmd.ExecuteReader();

                Console.Write(Environment.NewLine);

                while (reader.Read())
                {
                    Console.WriteLine("ALIAS {0} FOR {1}", reader.GetString(0), reader.GetString(1));
                }

                Console.WriteLine();
                reader.Close();

                cmd.CommandText = "SHOW PARAMETERS CALCRATE;";
                reader          = cmd.ExecuteReader();

                Console.Write(Environment.NewLine);

                while (reader.Read())
                {
                    Console.WriteLine("ALIAS: {0}, PARAM: {1},\t TYPE {2},\t POSITION: {3}", reader.GetString(0), reader.GetString(1), reader.GetString(2), reader.GetInt32(3));
                }

                Console.WriteLine();
                reader.Close();

                cmd.CommandText = "SHOW COLUMNS \"clients\";";
                reader          = cmd.ExecuteReader();

                Console.Write(Environment.NewLine);

                while (reader.Read())
                {
                    Console.WriteLine("TABLE: {0}, COLUMN: {1},\n\t NATIVE TYPE: {2},\t DB TYPE: {3},\n\t POSITION: {4},\t NULLABLE: {5},\t IDENTITY: {6}", reader.GetString(0), reader.GetString(1), reader.GetString(2), reader.GetValue(3), reader.GetInt32(4), reader.GetBoolean(5), reader.GetBoolean(6));
                }

                Console.WriteLine();
                reader.Close();
            }
            catch (SharpHsqlException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            finally
            {
                conn.Close();
                conn = null;
            }

            Console.WriteLine();
            Console.WriteLine("Press [ENTER] to exit.");
            Console.ReadLine();
        }
        /// <summary>
        /// Create and prepare a SharpHsqlCommand, and call ExecuteReader with the appropriate CommandBehavior.
        /// </summary>
        /// <remarks>
        /// If we created and opened the connection, we want the connection to be closed when the DataReader is closed.
        /// 
        /// If the caller provided the connection, we want to leave it to them to manage.
        /// </remarks>
        /// <param name="connection">A valid SharpHsqlConnection, on which to execute this command</param>
        /// <param name="transaction">A valid SharpHsqlTransaction, or 'null'</param>
        /// <param name="commandType">The CommandType (TableDirect, Text)</param>
        /// <param name="commandText">The T-SQL command</param>
        /// <param name="commandParameters">An array of SharpHsqlParameters to be associated with the command or 'null' if no parameters are required</param>
        /// <param name="connectionOwnership">Indicates whether the connection parameter was provided by the caller, or created by SharpHsqlHelper</param>
        /// <returns>SharpHsqlReader containing the results of the command</returns>
        private static SharpHsqlReader ExecuteReader(SharpHsqlConnection connection, SharpHsqlTransaction transaction, CommandType commandType, string commandText, SharpHsqlParameter[] commandParameters, SharpHsqlConnectionOwnership connectionOwnership)
        {
            if( connection == null ) throw new ArgumentNullException( "connection" );

            bool mustCloseConnection = false;
            // Create a command and prepare it for execution
            SharpHsqlCommand cmd = new SharpHsqlCommand();
            try
            {
                PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection );

                // Create a reader
                SharpHsqlReader dataReader;

                // Call ExecuteReader with the appropriate CommandBehavior
                if (connectionOwnership == SharpHsqlConnectionOwnership.External)
                {
                    dataReader = cmd.ExecuteReader();
                }
                else
                {
                    dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                }

                // Detach the SharpHsqlParameters from the command object, so they can be used again.
                // HACK: There is a problem here, the output parameter values are fletched
                // when the reader is closed, so if the parameters are detached from the command
                // then the SharpHsqlReader can´t set its values.
                // When this happen, the parameters can´t be used again in other command.
                bool canClear = true;
                foreach(SharpHsqlParameter commandParameter in cmd.Parameters)
                {
                    if (commandParameter.Direction != ParameterDirection.Input)
                        canClear = false;
                }

                if (canClear)
                {
                    cmd.Parameters.Clear();
                }

                return dataReader;
            }
            catch
            {
                if( mustCloseConnection )
                    connection.Close();
                throw;
            }
        }
 /// <summary>
 /// This method is used to attach array of SharpHsqlParameters to a SharpHsqlCommand.
 /// 
 /// This method will assign a value of DbNull to any parameter with a direction of
 /// InputOutput and a value of null.  
 /// 
 /// This behavior will prevent default values from being used, but
 /// this will be the less common case than an intended pure output parameter (derived as InputOutput)
 /// where the user provided no input value.
 /// </summary>
 /// <param name="command">The command to which the parameters will be added</param>
 /// <param name="commandParameters">An array of SharpHsqlParameters to be added to command</param>
 private static void AttachParameters(SharpHsqlCommand command, SharpHsqlParameter[] commandParameters)
 {
     if( command == null ) throw new ArgumentNullException( "command" );
     if( commandParameters != null )
     {
         foreach (SharpHsqlParameter p in commandParameters)
         {
             if( p != null )
             {
                 // Check for derived output value with no value assigned
                 if ( ( p.Direction == ParameterDirection.InputOutput ||
                     p.Direction == ParameterDirection.Input ) &&
                     (p.Value == null))
                 {
                     p.Value = DBNull.Value;
                 }
                 command.Parameters.Add(p);
             }
         }
     }
 }
        /// <summary>
        /// This method opens (if necessary) and assigns a connection, transaction, command type and parameters 
        /// to the provided command
        /// </summary>
        /// <param name="command">The SharpHsqlCommand to be prepared</param>
        /// <param name="connection">A valid SharpHsqlConnection, on which to execute this command</param>
        /// <param name="transaction">A valid SharpHsqlTransaction, or 'null'</param>
        /// <param name="commandType">The CommandType (TableDirect, Text)</param>
        /// <param name="commandText">The T-SQL command</param>
        /// <param name="commandParameters">An array of SharpHsqlParameters to be associated with the command or 'null' if no parameters are required</param>
        /// <param name="mustCloseConnection"><c>true</c> if the connection was opened by the method, otherwose is false.</param>
        private static void PrepareCommand(SharpHsqlCommand command, SharpHsqlConnection connection, SharpHsqlTransaction transaction, CommandType commandType, string commandText, SharpHsqlParameter[] commandParameters, out bool mustCloseConnection )
        {
            if( command == null ) throw new ArgumentNullException( "command" );

            if(commandType == CommandType.StoredProcedure ) throw new ArgumentException("Stored Procedures are not supported.");

            // If the provided connection is not open, we will open it
            if (connection.State != ConnectionState.Open)
            {
                mustCloseConnection = true;
                connection.Open();
            }
            else
            {
                mustCloseConnection = false;
            }

            // Associate the connection with the command
            command.Connection = connection;

            // Set the command text (SQL statement)
            command.CommandText = commandText;

            // If we were provided a transaction, assign it
            if (transaction != null)
            {
                if( transaction.Connection == null ) throw new ArgumentException( "The transaction was rollbacked or commited, please provide an open transaction.", "transaction" );
                command.Transaction = transaction;
            }

            // Set the command type
            command.CommandType = commandType;

            // Attach the command parameters if they are provided
            if (commandParameters != null)
            {
                AttachParameters(command, commandParameters);
            }
            return;
        }
Example #8
0
            public override void Visit(DbConstantExpression expression)
            {
                SharpHsqlParameter parameter = CreateParameter(expression.Value, expression.ResultType);

                _commandText.Append(parameter.ParameterName);
            }
 public IDbDataParameter CreateParameter(String name, Object value)
 {
     if (!mInitialized)
         throw new Exception("Please call Initialize() before");
     IDbDataParameter parameter = new SharpHsqlParameter();
     parameter.ParameterName = name;
     if (value == null)
     {
         parameter.Value = DBNull.Value;
     }
     else
     {
         parameter.Value = value;
     }
     return parameter;
 }
Example #10
0
 // Creates a new parameter for a value in this expression translator
 internal SharpHsqlParameter CreateParameter(object value, DbType dbType)
 {
     string parameterName = string.Concat("@p", parameterNameCount.ToString(CultureInfo.InvariantCulture));
     parameterNameCount++;
     SharpHsqlParameter parameter = new SharpHsqlParameter(parameterName, value);
     parameter.DbType = dbType;
     _parameters.Add(parameter);
     return parameter;
 }