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); }
/// <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); }
/// <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); }
/// <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); }