public static void CheckDeclareField(bool isStatic, string fieldName, DataTypePointer fieldType, CodeTypeDeclaration typeDeclaration, string defaultValue)
        {
            CodeMemberField cmf;

            foreach (CodeTypeMember ctm in typeDeclaration.Members)
            {
                cmf = ctm as CodeMemberField;
                if (cmf != null)
                {
                    if (string.CompareOrdinal(cmf.Name, fieldName) == 0)
                    {
                        return;
                    }
                }
            }
            cmf = new CodeMemberField(fieldType.TypeString, fieldName);
            if (!string.IsNullOrEmpty(defaultValue))
            {
                bool   b;
                object val = VPLUtil.ConvertObject(defaultValue, fieldType.BaseClassType, out b);
                if (b)
                {
                    cmf.InitExpression = ObjectCreationCodeGen.ObjectCreationCode(val);
                }
            }
            if (isStatic)
            {
                cmf.Attributes |= MemberAttributes.Static;
            }
            typeDeclaration.Members.Add(cmf);
        }
示例#2
0
        public static object ConvertValueByType(Type t, object v)
        {
            bool   ok;
            object ret = VPLUtil.ConvertObject(v, t, out ok);

            if (ok)
            {
                return(ret);
            }
            throw new Exception(string.Format(CultureInfo.InvariantCulture, "cannot convert {0} to {1}", v, t));
        }
示例#3
0
        public string ReceiveData(DataTable tblSrc, bool bSilent)
        {
            string error = string.Empty;

            try
            {
                if (TableName.Length > 0 && _fields != null && connect != null && tblSrc != null)
                {
                    if (_fields.Count > 0 && tblSrc.Columns.Count >= _fields.Count)
                    {
                        if (tblSrc.Rows.Count > 0)
                        {
                            bool bNeedUpdate    = false;
                            bool bNeedUpdateRun = false;
                            int  i;
                            for (i = 0; i < _fields.Count; i++)
                            {
                                if (_fields[i].Indexed)
                                {
                                    bNeedUpdate = true;
                                    break;
                                }
                            }
                            EnumParameterStyle pStyle  = connect.ConnectionObject.ParameterStyle;
                            string             n1      = connect.ConnectionObject.NameDelimiterBegin;
                            string             n2      = connect.ConnectionObject.NameDelimiterEnd;
                            string             sInsert = StringUtility.FormatInvString(
                                "INSERT INTO {0}{1}{2} ({0}{3}{2}",
                                n1, TableName, n2, _fields[0].Name);

                            string sValues = _fields[0].GetParameterName(pStyle);
                            string sUpdate = StringUtility.FormatInvString(
                                "UPDATE {0}{1}{2} SET ",
                                n1, TableName, n2);
                            string sExist;
                            if (connect.ConnectionObject.IsJet || connect.ConnectionObject.IsMSSQL)
                            {
                                sExist = StringUtility.FormatInvString(
                                    "SELECT TOP 1 1 FROM {0}{1}{2} WHERE ",
                                    n1, TableName, n2);
                            }
                            else
                            {
                                sExist = StringUtility.FormatInvString(
                                    "SELECT 1 FROM {0}{1}{2} WHERE ",
                                    n1, TableName, n2);
                            }
                            string sWhere = "";
                            int    k = 0, n = 0;
                            if (bNeedUpdate)
                            {
                                if (_fields[0].Indexed)
                                {
                                    sWhere = StringUtility.FormatInvString(
                                        "{0}{1}{2}={3}", n1, _fields[0].Name, n2, _fields[0].GetParameterName(pStyle));
                                }
                                else
                                {
                                    sUpdate += StringUtility.FormatInvString("{0}{1}{2}={3}", n1, _fields[0].Name, n2, _fields[0].GetParameterName(pStyle));
                                    k++;
                                }
                                for (i = 0; i < _fields.Count; i++)
                                {
                                    if (_fields[i].Indexed)
                                    {
                                        if (n == 0)
                                        {
                                            sExist += StringUtility.FormatInvString("{0}{1}{2}={3}", n1, _fields[i].Name, n2, _fields[i].GetParameterName(pStyle));
                                        }
                                        else
                                        {
                                            sExist += StringUtility.FormatInvString(" AND {0}{1}{2}={3}", n1, _fields[i].Name, n2, _fields[i].GetParameterName(pStyle));
                                        }
                                        n++;
                                    }
                                }
                            }
                            for (i = 1; i < _fields.Count; i++)
                            {
                                sInsert += StringUtility.FormatInvString(",{0}{1}{2}", n1, _fields[i].Name, n2);
                                sValues += "," + _fields[i].GetParameterName(pStyle);
                                if (bNeedUpdate)
                                {
                                    if (_fields[i].Indexed)
                                    {
                                        if (sWhere.Length == 0)
                                        {
                                            sWhere = StringUtility.FormatInvString("{0}{1}{2}={3}", n1, _fields[i].Name, n2, _fields[i].GetParameterName(pStyle));
                                        }
                                        else
                                        {
                                            sWhere += StringUtility.FormatInvString(" AND {0}{1}{2}={3}", n1, _fields[i].Name, n2, _fields[i].GetParameterName(pStyle));
                                        }
                                    }
                                    else
                                    {
                                        if (k == 0)
                                        {
                                            sUpdate += StringUtility.FormatInvString("{0}{1}{2}={3}", n1, _fields[i].Name, n2, _fields[i].GetParameterName(pStyle));
                                        }
                                        else
                                        {
                                            sUpdate += StringUtility.FormatInvString(",{0}{1}{2}={3}", n1, _fields[i].Name, n2, _fields[i].GetParameterName(pStyle));
                                        }
                                        k++;
                                    }
                                }
                            }
                            if (bNeedUpdate && k > 0)
                            {
                                bNeedUpdateRun = true;
                            }
                            sInsert += ") VALUES (";
                            sInsert += sValues;
                            sInsert += ")";
                            //
                            connect.ConnectionObject.Open();
                            //
                            if (connect.ConnectionObject.IsMSSQL)
                            {
                                dbWrapper dbHelp = new dbWrapper();
                                dbHelp.CreateCommand(connect.ConnectionObject);
                                string sHelp = string.Format(CultureInfo.InvariantCulture, "SET IDENTITY_INSERT {0} ON", TableName);
                                dbHelp.SetCommandText(sHelp);
                                dbHelp.ExecuteNonQuery();
                            }
                            //
                            dbWrapper dbUpdate = null;
                            dbWrapper dbExists = null;
                            dbWrapper dbInsert = new dbWrapper();
                            dbInsert.CreateCommand(connect.ConnectionObject);
                            dbInsert.SetCommandText(sInsert);
                            //
                            object vExist;
                            bool   bInsert;
                            //
                            for (i = 0; i < _fields.Count; i++)
                            {
                                dbInsert.AddCommandParameter(_fields[i], pStyle);
                            }
                            //
                            if (bNeedUpdate)
                            {
                                if (bNeedUpdateRun)
                                {
                                    dbUpdate = new dbWrapper();
                                    dbUpdate.CreateCommand(connect.ConnectionObject);
                                    dbUpdate.SetCommandText(StringUtility.FormatInvString("{0} WHERE {1}", sUpdate, sWhere));
                                }
                                dbExists = new dbWrapper();
                                dbExists.CreateCommand(connect.ConnectionObject);
                                dbExists.SetCommandText(sExist);
                                for (i = 0; i < _fields.Count; i++)
                                {
                                    if (_fields[i].Indexed)
                                    {
                                        dbExists.AddCommandParameter(_fields[i], pStyle);
                                    }
                                    else
                                    {
                                        if (bNeedUpdateRun)
                                        {
                                            dbUpdate.AddCommandParameter(_fields[i], pStyle);
                                        }
                                    }
                                }
                                if (bNeedUpdateRun)
                                {
                                    for (i = 0; i < _fields.Count; i++)
                                    {
                                        if (_fields[i].Indexed)
                                        {
                                            dbUpdate.AddCommandParameter(_fields[i], pStyle);
                                        }
                                    }
                                }
                            }
                            for (int m = 0; m < tblSrc.Rows.Count; m++)
                            {
                                bInsert = true;
                                if (bNeedUpdate)
                                {
                                    k = 0;
                                    for (i = 0; i < _fields.Count; i++)
                                    {
                                        if (_fields[i].Indexed)
                                        {
                                            dbExists.SetParameterValue(k, tblSrc.Rows[m][i]);
                                            k++;
                                        }
                                    }
                                    vExist = dbExists.ExecuteScalar();
                                    if (vExist != null && vExist != System.DBNull.Value)
                                    {
                                        bInsert = false;
                                    }
                                    if (!bInsert)
                                    {
                                        if (bNeedUpdateRun)
                                        {
                                            k = 0;
                                            for (i = 0; i < _fields.Count; i++)
                                            {
                                                if (!_fields[i].Indexed)
                                                {
                                                    if (dbUpdate.Parameters[k].DbType == System.Data.DbType.Binary)
                                                    {
                                                        object v = tblSrc.Rows[m][i];
                                                        if (v == null || v == System.DBNull.Value)
                                                        {
                                                            dbUpdate.Parameters[k].Value = System.DBNull.Value;
                                                        }
                                                        else
                                                        {
                                                            string s  = v.ToString();
                                                            byte[] bs = StringUtility.StringToBytes(s);
                                                            dbUpdate.Parameters[k].Value = bs;
                                                        }
                                                    }
                                                    else
                                                    {
                                                        dbUpdate.Parameters[k].Value = tblSrc.Rows[m][i];
                                                    }
                                                    k++;
                                                }
                                            }
                                            for (i = 0; i < _fields.Count; i++)
                                            {
                                                if (_fields[i].Indexed)
                                                {
                                                    if (dbUpdate.Parameters[k].DbType == System.Data.DbType.Binary)
                                                    {
                                                        object v = tblSrc.Rows[m][i];
                                                        if (v == null || v == System.DBNull.Value)
                                                        {
                                                            dbUpdate.Parameters[k].Value = System.DBNull.Value;
                                                        }
                                                        else
                                                        {
                                                            string s  = v.ToString();
                                                            byte[] bs = StringUtility.StringToBytes(s);
                                                            dbUpdate.Parameters[k].Value = bs;
                                                        }
                                                    }
                                                    else
                                                    {
                                                        dbUpdate.Parameters[k].Value = tblSrc.Rows[m][i];
                                                    }
                                                    k++;
                                                }
                                            }
                                            dbUpdate.ExecuteNonQuery();
                                        }
                                    }
                                }
                                if (bInsert)
                                {
                                    for (i = 0; i < _fields.Count; i++)
                                    {
                                        object v = tblSrc.Rows[m][i];
                                        if (v == null || v == System.DBNull.Value)
                                        {
                                            dbInsert.Parameters[i].Value = System.DBNull.Value;
                                        }
                                        else
                                        {
                                            if (dbInsert.Parameters[i].DbType == System.Data.DbType.Binary)
                                            {
                                                string s  = v.ToString();
                                                byte[] bs = StringUtility.StringToBytes(s);
                                                dbInsert.Parameters[i].Value = bs;
                                            }
                                            else
                                            {
                                                bool   b;
                                                object v2 = VPLUtil.ConvertObject(v, EPField.ToSystemType(dbInsert.Parameters[i].DbType), out b);
                                                dbInsert.Parameters[i].Value = v2;
                                            }
                                        }
                                    }
                                    dbInsert.ExecuteNonQuery();
                                }
                            }
                            if (connect.ConnectionObject.IsMSSQL)
                            {
                                dbWrapper dbHelp = new dbWrapper();
                                dbHelp.CreateCommand(connect.ConnectionObject);
                                string sHelp = string.Format(CultureInfo.InvariantCulture, "SET IDENTITY_INSERT {0} OFF", TableName);
                                dbHelp.SetCommandText(sHelp);
                                dbHelp.ExecuteNonQuery();
                            }
                            connect.ConnectionObject.Close();
                            //
                        }
                    }
                }
            }
            catch (Exception er)
            {
                error = ExceptionLimnorDatabase.FormExceptionText(er, "Error saving data to database");
                TraceLogClass.TraceLog.ShowMessageBox = !bSilent;
                TraceLogClass.TraceLog.Log(er);
            }
            finally
            {
                connect.ConnectionObject.Close();
            }
            return(error);
        }
            public override void SetValue(object component, object value)
            {
                bool o;

                _owner.IsFieldImage[_idx] = (bool)VPLUtil.ConvertObject(value, _type, out o);
            }