示例#1
0
        public void OracleLimitIdentifierLength()
        {
            var names = new[] {
                "123456789012345678901234567890",
                "123456789012345678901234567890a",
                "123456789012345678901234567890b"
            };

            Assert.AreEqual("30, 31, 31", TestUtility.Dump(names, name => name.Length));

            var limited = names.Select(name => OracleSqlUtility.LimitIdentifierLength(name)).ToArray();

            TestUtility.Dump(limited);

            Assert.AreEqual(names[0], limited[0]);
            Assert.AreEqual(30, limited[1].Length);
            Assert.AreEqual(30, limited[2].Length);
            Assert.IsFalse(limited[1].Equals(limited[2], StringComparison.OrdinalIgnoreCase));
        }
        private void SafeExecuteCommand(Action <OracleCommand> action)
        {
            using (var connection = new OracleConnection(_connectionString))
            {
                OracleTransaction transaction = null;
                OracleCommand     com;

                try
                {
                    connection.Open();
                    OracleSqlUtility.SetSqlUserInfo(connection, _userInfo);

                    transaction        = connection.BeginTransaction();
                    com                = connection.CreateCommand();
                    com.CommandTimeout = SqlUtility.SqlCommandTimeout;
                    com.Transaction    = transaction;
                }
                catch (OracleException ex)
                {
                    if (transaction != null)
                    {
                        transaction.Rollback();
                    }

                    var    csb = new OracleConnectionStringBuilder(_connectionString);
                    string msg = string.Format(CultureInfo.InvariantCulture, "Could not connect to data source '{0}', userID '{1}'.", csb.DataSource, csb.UserID);
                    _logger.Error(msg);
                    _logger.Error(ex.ToString());
                    throw new FrameworkException(msg, ex);
                }

                try
                {
                    var setNationalLanguage = OracleSqlUtility.SetNationalLanguageQuery();
                    if (!string.IsNullOrEmpty(setNationalLanguage))
                    {
                        _logger.Trace("Setting national language: {0}", SqlUtility.NationalLanguage);
                        com.CommandText = setNationalLanguage;
                        com.ExecuteNonQuery();
                    }

                    action(com);
                    transaction.Commit();
                }
                catch (OracleException ex)
                {
                    if (com != null && !string.IsNullOrWhiteSpace(com.CommandText))
                    {
                        _logger.Error("Unable to execute SQL query:\r\n" + com.CommandText);
                    }

                    string msg = "OracleException has occurred:\r\n" + ReportSqlErrors(ex);
                    if (ex.Number == 911)
                    {
                        msg += "\r\nCheck that you are not using ';' at the end of the command's SQL query.";
                    }
                    _logger.Error(msg);
                    _logger.Error(ex.ToString());
                    throw new FrameworkException(msg, ex);
                }
                finally
                {
                    TryRollback(transaction);
                }
            }
        }
 public void OracleGetSchemaName()
 {
     Assert.AreEqual("someschema", OracleSqlUtility.GetSchemaName("someschema.someview"));
     TestUtility.ShouldFail(() => OracleSqlUtility.GetSchemaName("someview"), "Missing schema");
 }