Example #1
0
        public String GetInsertOdbc(string TN, OdbcDBType type)
        {
            if (_schema == null)
            {
                String message = SysMsg.GetSystemMessage(((DataModule)_updateComonent.OwnerComp).Language, "Srvtools", "UpdateComponent", "msg_SchemaIsNull");
                throw new ArgumentException(String.Format(message, _updateComonent.Name));
            }

            if (_insertSQL != null && _insertSQL.Length > 0) return _insertSQL;

            // Create the table name and schema name.
            CreateTableName(); CreateSchemaName();

            StringBuilder columnsSB = new StringBuilder();
            StringBuilder valuesSB = new StringBuilder();

            Int32 index = 0;
            foreach (DataRow schemaRow in _schema.Rows)
            {
                String columnName = (String)schemaRow["ColumnName"];
                String columnType = schemaRow["DataType"].ToString();
                //String columnTypeName = schemaRow["DataTypeName"].ToString();

                if (IsLeftJoinClumns(schemaRow))
                { index++; continue; }
                else
                { index++; }

                FieldAttr attr = GetFieldAttrByColumnName(columnName);
                if (attr != null && !attr.UpdateEnable)
                {
                    continue;
                }

                //if (IsReadOnly(schemaRow)) continue;

                Object columnValue = GetColumnIOrUValue(columnName, columnType);
                if (columnValue == null || columnValue == DBNull.Value)
                { continue; }

                if (columnsSB.Length > 0)
                { columnsSB.Append(", "); valuesSB.Append(", "); }

                //columnsSB.Append(Quote(columnName));
                //valuesSB.Append(Mark(columnTypeName, columnType, TransformMarkerInColumnValue(columnType, columnValue)));
                columnsSB.Append(columnName);
                valuesSB.Append(MarkOdbc(columnType, TransformMarkerInColumnValue(columnType, columnValue), type));
            }

            if (columnsSB.ToString() != null && columnsSB.ToString().Length > 0)
            {
                String insertSQL = "";

                if (_tableName == "")
                    insertSQL = "insert into " + TN + " (" + columnsSB.ToString() + ") " +
                    " values (" + valuesSB.ToString() + ")";
                else
                    insertSQL = "insert into " + _tableName + " (" + columnsSB.ToString() + ") " +
                    " values (" + valuesSB.ToString() + ")";

                _insertSQL = insertSQL;
            }

            return _insertSQL;
        }
Example #2
0
 private String MarkOdbc(String type, Object columnValue, OdbcDBType odbcType)
 {
     if (Type.GetType(type).Equals(typeof(Char)) || Type.GetType(type).Equals(typeof(String)))
     {
         return _marker.ToString() + columnValue.ToString() + _marker.ToString();
     }
     else if (Type.GetType(type).Equals(typeof(Boolean)))
     {
         Boolean b = (Boolean)columnValue;
         if (b)
             return "1";
         else
             return "0";
     }
     else if (Type.GetType(type).Equals(typeof(DateTime)))
     {
         string s = "";
         if (odbcType == OdbcDBType.InfoMix)
         {
             DateTime t = Convert.ToDateTime(columnValue);
             s = t.Year.ToString() + checkDate(t.Month.ToString()) + checkDate(t.Day.ToString()) + checkDate(t.Hour.ToString()) + checkDate(t.Minute.ToString()) + checkDate(t.Second.ToString());
             s = "to_date('" + s + "', '%Y%m%d%H%M%S')";
             //return _marker.ToString() + s + _marker.ToString();
         }
         else if (odbcType == OdbcDBType.FoxPro)
         {
             DateTime t = Convert.ToDateTime(columnValue);
             s = t.Month.ToString() + "/" + t.Day.ToString() + "/" + t.Year.ToString();
             s = "{" + s + "}";
             //return _marker.ToString() + s + _marker.ToString();
         }
         else
         {
             DateTime t = Convert.ToDateTime(columnValue);
             s = "'" + t.Month.ToString() + "/" + t.Day.ToString() + "/" + t.Year.ToString() + "'";
         }
         return s;
     }
     else if (Type.GetType(type).Equals(typeof(Byte[])))
     {
         StringBuilder builder = new StringBuilder("0x");   // 16进制、Oracle里的Binary没有测试。
         foreach (Byte b in (Byte[])columnValue)
         {
             string tmp = Convert.ToString(b, 16);
             if (tmp.Length < 2)
                 tmp = "0" + tmp;
             builder.Append(tmp);
         }
         return builder.ToString();
     }
     else
     {
         return columnValue.ToString();
     }
 }
Example #3
0
        private String CreateOriginalOdbcWherePart(OdbcDBType type)
        {
            StringBuilder originalWherePartSB = new StringBuilder();

            List<DataRow> columnsList = GetWhereColumnsList();
            if (columnsList == null || columnsList.Count == 0)
            { return null; }

            foreach (DataRow schemaRow in columnsList)
            {
                String columnName = (String)schemaRow["ColumnName"];
                String columnType = schemaRow["DataType"].ToString();
                //String columnTypeName = schemaRow["DataTypeName"].ToString();

                Object originalValue = _row[columnName, DataRowVersion.Original];
                if (originalValue == null || originalValue == DBNull.Value)
                { originalWherePartSB.Append(columnName + " is null and "); }
                else
                {
                    originalWherePartSB.Append(columnName + " = "
                        + MarkOdbc(columnType, TransformMarkerInColumnValue(columnType, originalValue), type) + " and ");
                    //originalWherePartSB.Append(Quote(columnName) + " = "
                    //    + Mark(columnTypeName, columnType, TransformMarkerInColumnValue(columnType, originalValue)) + " and ");
                }
            }

            originalWherePartSB.Remove(originalWherePartSB.Length - 5, 5);
            return originalWherePartSB.ToString();
        }
Example #4
0
        public String GetDeleteOdbc(string TN, OdbcDBType type)
        {
            if (_schema == null)
            {
                String message = SysMsg.GetSystemMessage(((DataModule)_updateComonent.OwnerComp).Language, "Srvtools", "UpdateComponent", "msg_SchemaIsNull");
                throw new ArgumentException(String.Format(message, _updateComonent.Name));
            }

            if (_deleteSQL != null) return _deleteSQL;

            CreateTableName(); CreateSchemaName();

            String originalWherePart = CreateOriginalOdbcWherePart(type);
            if (originalWherePart == null || originalWherePart.Length == 0)
            { return null; }

            //String deleteSQL = "delete from " + TableName + " where " + originalWherePart;
            String deleteSQL = "";
            if (_tableName != "")
                deleteSQL = "delete from " + _tableName + " where " + originalWherePart;
            else
                deleteSQL = "delete from " + TN + " where " + originalWherePart;
            _deleteSQL = deleteSQL;
            return _deleteSQL;
        }
Example #5
0
        private String CreateOdbcUpdatePart(OdbcDBType type)
        {
            // create updateColumns.
            StringBuilder updatePartSB = new StringBuilder();

            List<DataRow> columnsList = GetOracleUpdateColumnsList();

            foreach (DataRow schemaRow in columnsList)
            {
                String columnName = (String)schemaRow["ColumnName"];
                String columnType = schemaRow["DataType"].ToString();
                //String columnTypeName = schemaRow["DataTypeName"].ToString();

                Object currentValue = _row[columnName, DataRowVersion.Current];
                Object originalValue = _row[columnName, DataRowVersion.Original];

                //由原来的DBNull.Value和Null才带DefaultValue —> 任何时候都带DefaultValue
                //if ((originalValue == null || originalValue == DBNull.Value) && (currentValue == null || currentValue == DBNull.Value))
                //{
                currentValue = GetColumnIOrUValue(columnName, columnType);
                if ((currentValue == null || currentValue == DBNull.Value) &&
                (originalValue == null || originalValue == DBNull.Value))
                {
                    continue;
                }
                //}
                //else
                //{
                if (currentValue.Equals(originalValue)) continue;
                //}

                if (columnType == "System.Byte[]")
                {
                    if (currentValue != DBNull.Value && originalValue != DBNull.Value)
                    {
                        byte[] btc = (byte[])currentValue;
                        byte[] bto = (byte[])originalValue;
                        if (btc.Length == bto.Length)
                        {
                            bool blequal = true;
                            for (int i = 0; i < btc.Length; i++)
                            {
                                if (!btc[i].Equals(bto[i]))
                                {
                                    blequal = false;
                                    break;
                                }
                            }
                            if (blequal)
                            {
                                continue;
                            }
                        }
                    }
                }

                if (updatePartSB.Length > 0)
                    updatePartSB.Append(", ");

                if (currentValue == null || currentValue == DBNull.Value)
                { updatePartSB.Append(columnName + " = null"); }
                else
                {
                    updatePartSB.Append(columnName + " = " + MarkOdbc(columnType, TransformMarkerInColumnValue(columnType, currentValue), type));
                }
                continue;
            }
            return updatePartSB.ToString();
        }
Example #6
0
        public String GetWriteBackOdbcWherePart(OdbcDBType type)
        {
            StringBuilder wBWhereSQLSB = new StringBuilder();

            List<DataRow> whereColumnsList = GetWhereColumnsList();
            foreach (DataRow r in whereColumnsList)
            {
                String columnName = r["ColumnName"].ToString();
                String columnType = r["DataType"].ToString();
                //String columnTypeName = r["DataTypeName"].ToString();

                Object columnValue = null;
                if (_row.RowState == DataRowState.Deleted)
                { columnValue = _row[columnName, DataRowVersion.Original]; }
                else
                { columnValue = _row[columnName, DataRowVersion.Current]; }

                if (wBWhereSQLSB.Length > 0)
                { wBWhereSQLSB.Append(" and "); }

                if (columnValue == null || columnValue == DBNull.Value)
                { wBWhereSQLSB.Append(columnName + "is null"); }
                else
                { wBWhereSQLSB.Append(columnName + " = " + MarkOdbc(columnType, TransformMarkerInColumnValue(columnType, columnValue), type)); }
                //{ wBWhereSQLSB.Append(Quote(columnName) + " = " + Mark(columnTypeName, columnType, TransformMarkerInColumnValue(columnType, columnValue))); }
            }

            return wBWhereSQLSB.ToString();
        }