该方法来到hubbledotnet源代码方法
路径:hubble.Data-->hubble.SQLClient-->HubbleCommand类里面的BuildSqlWithSqlParameter方法
在此谢谢eaglet
View Code
#region static methods private static string BuildSqlWithSqlParameter(string sql,System.Data.Common.DbParameter[] paras) { System.Data.Common.DbParameter[] arrParas = new System.Data.Common.DbParameter[paras.Length]; for (int i = 0; i < paras.Length; i++) { arrParas[i] = paras[i]; } Array.Sort(arrParas, new DbParameterForSort()); object[] objParas = new object[arrParas.Length]; for (int i = 0; i < arrParas.Length; i++) { sql = sql.Replace(arrParas[i].ParameterName, "{" + i.ToString() + "}"); switch (arrParas[i].DbType) { case System.Data.DbType.AnsiString: case System.Data.DbType.AnsiStringFixedLength: case System.Data.DbType.String: if (arrParas[i].Value == null) { objParas[i] = null; } else { objParas[i] =arrParas[i].Value; } break; case System.Data.DbType.StringFixedLength: case System.Data.DbType.Xml: objParas[i] = arrParas[i].Value as string; break; case System.Data.DbType.Boolean: if (arrParas[i].Value == null) { objParas[i] = null; } else { objParas[i] = arrParas[i].Value.ToString(); } break; case System.Data.DbType.Date: if (arrParas[i].Value == null) { objParas[i] = null; } else { objParas[i] = ((DateTime)arrParas[i].Value).ToString("yyyy-MM-dd"); } break; case System.Data.DbType.DateTime: case System.Data.DbType.DateTime2: if (arrParas[i].Value == null) { objParas[i] = null; } else { objParas[i] = Convert.ToDateTime(arrParas[i].Value);// ((DateTime)arrParas[i].Value).ToString("yyyy-MM-dd HH:mm:ss"); } break; case System.Data.DbType.Time: if (arrParas[i].Value == null) { objParas[i] = null; } else { objParas[i] = ((DateTime)arrParas[i].Value).ToString("HH:mm:ss"); } break; case System.Data.DbType.Byte: case System.Data.DbType.UInt16: case System.Data.DbType.UInt32: case System.Data.DbType.UInt64: if (arrParas[i].Value == null) { objParas[i] = null; } else { objParas[i] = ulong.Parse(arrParas[i].Value.ToString()); } break; case System.Data.DbType.Decimal: case System.Data.DbType.Double: case System.Data.DbType.Single: if (arrParas[i].Value == null) { objParas[i] = null; } else { objParas[i] = double.Parse(arrParas[i].Value.ToString()); } break; case System.Data.DbType.Int16: case System.Data.DbType.Int32: case System.Data.DbType.Int64: case System.Data.DbType.SByte: if (arrParas[i].Value == null) { objParas[i] = null; } else { objParas[i] = long.Parse(arrParas[i].Value.ToString()); } break; default: throw new System.Data.DataException(string.Format("Invalid parameter DataType: {0}", arrParas[i].DbType)); } } return BuildSql(sql, objParas); } class DbParameterForSort : IComparer<System.Data.Common.DbParameter> { #region IComparer<DbParameter> Members public int Compare(System.Data.Common.DbParameter x, System.Data.Common.DbParameter y) { return y.ParameterName.CompareTo(x.ParameterName); } #endregion } public static string BuildSql(string sql, object[] paras) { if (paras == null) { return sql; } else { object[] parameters = new object[paras.Length]; paras.CopyTo(parameters, 0); for (int i = 0; i < parameters.Length; i++) { object obj = parameters[i]; if (obj == null) { parameters[i] = "NULL"; } else if (obj is string) { parameters[i] = string.Format("'{0}'", ((string)obj).Replace("'", "''")); } else if (obj is bool) { parameters[i] = string.Format("'{0}'", obj); } else if (obj is DateTime) { parameters[i] = string.Format("'{0}'", ((DateTime)obj).ToString("yyyy-MM-dd HH:mm:ss")); } else if (obj is byte[]) { StringBuilder sb = new StringBuilder(); sb.Append("0x"); foreach (byte b in (byte[])obj) { sb.AppendFormat("{0:x1}", b); } parameters[i] = sb.ToString(); } else { parameters[i] = obj.ToString(); } } return string.Format(sql, parameters); } } #endregion