Ejemplo n.º 1
0
        /// <summary>
        /// 更新记录(存在更新,不存在添加)
        /// </summary>
        /// <returns>返回id</returns>
        public int InsertOrUpdateId(string condition, string idName = "id")
        {
            if (__EditColumns.Count == 0)
            {
                return(-1);
            }

            var sb         = new StringBuilder();
            var parameters = new List <object>();

            if (condition.NotNullOrEmpty())
            {
                sb.Append("if not exists(select 1 from ").Append(TableName).Append(" where ").Append(condition).Append(")\nbegin\n");
            }
            sb.Append("insert into ").Append(TableName).Append(" (");
            foreach (var column in __EditColumns)
            {
                sb.Append("[").Append(column.Key).Append("],");
                parameters.Add(column.Value);
            }
            sb.Remove(sb.Length - 1, 1);
            sb.Append(")values(");
            var columnCount = __EditColumns.Count;

            for (var i = 0; i < columnCount; i++)
            {
                sb.Append("?,");
            }
            sb.Remove(sb.Length - 1, 1);
            sb.Append(")\nselect SCOPE_IDENTITY()\nend else begin\n");
            sb.Append("update ").Append(TableName).Append(" set ");
            foreach (var column in __EditColumns)
            {
                sb.Append("[").Append(column.Key).Append("] = ?,");
                parameters.Add(column.Value);
            }
            if (sb.ToString().EndsWith(","))
            {
                sb.Remove(sb.Length - 1, 1);
            }
            if (condition.HasValue())
            {
                sb.Append(" where ").Append(condition);
            }
            sb.Append("\nselect max(").Append(idName).Append(") from ").Append(TableName);
            if (condition.NotNullOrEmpty())
            {
                sb.Append(" where ").Append(condition);
            }
            sb.Append(" end");

            __EditColumns.Clear();

            return(DbBase2 <TK> .ExecuteScalarTrans(-1, sb.ToString(), parameters.ToArray()));
        }