Ejemplo n.º 1
0
        public static bool SendData(IEnumerable <AntVoice.Common.Entities.Neo.GraphNode> nodes)
        {
            Neo4jContext _context = new Neo4jContext(true);

            string json   = JsonConvert.SerializeObject(new { data = JsonConvert.SerializeObject(new { nodes = nodes }) });
            string result = _context.InsertData(json);

            try
            {
                InsertDataResult res = (InsertDataResult)JsonConvert.DeserializeObject(result, typeof(InsertDataResult));

                if (res.Status == "OK")
                {
                    Log.Debug("NodeHandler.Handle", "The data insertion went fine");
                    return(true);
                }
                else
                {
                    Log.Error("NodeHandler.Handle", "An error occured while inserting the data", res.Message);
                    return(false);
                }
            }
            catch (Exception e)
            {
                MonitoringTimers.Current.AddError(Counters.Neo4j_InsertDataPluginError);
                Log.Error("GraphDataAccess.SendData", "An error occured while deserializing the following Neo4j response", result);
            }

            return(false);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Insert into table, DML statement will be excuted here
        /// </summary>
        /// <param name="sql">This is sql query to insert data in to table in database</param>
        /// <returns></returns>
        public InsertDataResult <T> InsertIntoDatabase <T>(string SQL, params object[] pars)
        {
            InsertDataResult <T> insertDataResult = new InsertDataResult <T>();
            object result = null;

            try
            {
                if (cnn.State != ConnectionState.Open)
                {
                    cnn.Open();
                }
                NpgsqlCommand command    = new NpgsqlCommand(SQL, cnn);
                var           paramIndex = 0;
                foreach (var p in pars)
                {
                    var paramName = string.Format(":p{0}", paramIndex);
                    command.CommandText = command.CommandText.Replace("{" + paramIndex.ToString() + "}", paramName);
                    var sqlParam = new NpgsqlParameter();
                    sqlParam.ParameterName = paramName;
                    if (p != null)
                    {
                        sqlParam.Value = p;
                    }
                    else
                    {
                        sqlParam.Value = DBNull.Value;
                    }
                    command.Parameters.Add(sqlParam);
                    paramIndex++;
                }
                result = command.ExecuteScalar();
                //Insert successfully
                if (result != null)
                {
                    insertDataResult.Error = new ErrorAction()
                    {
                        ErrorType = DataActionErrorTypeEnum.None
                    };
                    insertDataResult.RecordId = result;
                }
                if (cnn.State != ConnectionState.Closed)
                {
                    cnn.Close();
                }
            }
            catch (NpgsqlException ex)
            {
                Utils utils = new Utils();
                insertDataResult = utils.ProcessException <T>(ex, insertDataResult);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(insertDataResult);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Insert into table, DML statement will be excuted here
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="tableName"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public InsertDataResult <T> InsertData <T>(string tableName, T data)
        {
            var type      = typeof(T);
            var pro       = type.GetProperties().ToList();
            var fieldList = pro.Select(p => new {
                name       = p.Name,
                value      = p.GetValue(data),
                paramIndex = pro.IndexOf(p)
            }).ToList();
            var    fields  = string.Join(",", fieldList.Select(p => Globals.Compiler.GetQName(p.name)).ToArray());
            var    strPro  = string.Join(",", fieldList.Select(p => ":p" + p.paramIndex).ToArray());
            var    tblName = Globals.Compiler.GetQName(tableName);
            string sql     = string.Format("INSERT INTO {0}({1}) VALUES({2}) RETURNING *", tblName, fields, strPro);
            InsertDataResult <T> insertDataResult = new InsertDataResult <T>();

            insertDataResult = InsertIntoDatabase <T>(sql, fieldList.Select(p => p.value).ToArray());
            return(insertDataResult);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Process exception when excute Insert
 /// </summary>
 /// <param name="ex">Exception</param>
 /// <returns>InsertDataResult<T></returns>
 public InsertDataResult <T> ProcessException <T>(NpgsqlException ex, InsertDataResult <T> insertDataResult)
 {
     /*
      * Yêu cầu sửa lại như sau:
      * Các lỗi kg xử lý được thì phải throw exception
      * Đoạn code này chỉ mới bắt 2 lỗi 23505,23502 còn các lỗi khác thì kg bắt
      */
     //Duplicate unique fields case
     if (((PostgresException)ex).SqlState == "23505")
     {
         string[] fields        = new string[] { };
         string   detail        = ((PostgresException)ex).Detail;
         string   leftStr       = detail.Split('=')[0];
         string   strFieldNames = leftStr.Split('(')[1].Split(')')[0];
         string[] str           = strFieldNames.Split(',');
         fields = str.Select(p => p.Replace(@"""", "")?.Replace(@"\", "")).ToArray();
         insertDataResult.Error = new ErrorAction()
         {
             ErrorType = DataActionErrorTypeEnum.DuplicateData,
             Fields    = fields
         };
     }
     //Require fields are null
     if (((PostgresException)ex).SqlState == "23502")
     {
         string[] fields  = new string[1];
         string   message = ((PostgresException)ex).Message;
         fields[0] = Regex.Split(message, @"\""")[1];
         insertDataResult.Error = new ErrorAction()
         {
             ErrorType = DataActionErrorTypeEnum.MissingFields,
             Fields    = fields
         };
     }
     return(insertDataResult);
 }