/// <summary> /// 填充 UI 字段 txtSql /// 如果选中“原始查询”: /// 使用相应的查询文本填充字段 txtSql.Text,并添加参数 /// 否则: /// 使用 sql 填充文本字段 txtSql.Text /// </summary> private void FillSqlText() { if (this.chkUseOriginal.Checked) { SqlQueryText qt = this.queryInfos[0]; if (this.radioQuery2.Checked) { qt = this.queryInfos[1]; } String s = qt.Text + "\r\n"; s += "-------------------------------"; for (int i = 0; i < qt.Params.Length; i++) { ParameterText param = qt.Params[i]; if (param.SqlType == "String") { s += "\r\n" + param.Name + " [" + param.SqlType + "]: " + Utils.QuoteString(param.Value); } else { s += "\r\n" + param.Name + " [" + param.SqlType + "]: " + param.Value; } } this.txtSql.Text = s; } else { this.txtSql.Text = this.currentSql; } }
private static SqlQueryText[] GetFullQueryInfo(DataContext dataContext, IQueryable query) { System.Data.Common.DbCommand dbCommand = dataContext.GetCommand(query); SqlQueryText[] result = new SqlQueryText[1]; for (int i = 0, n = 1; i < n; i++) { result[i].Text = dbCommand.CommandText; int nParams = dbCommand.Parameters.Count; result[i].Params = new ParameterText[nParams]; for (int j = 0; j < nParams; j++) { ParameterText param = new ParameterText(); System.Data.Common.DbParameter pInfo = dbCommand.Parameters[j]; param.Name = pInfo.ParameterName; param.SqlType = pInfo.DbType.ToString(); object paramValue = pInfo.Value; if (paramValue == null) { param.Value = null; } else { param.Value = pInfo.Value.ToString(); } result[i].Params[j] = param; } } return(result); }
/// <summary> /// Преобразование текста SQL-запроса (в котором содержатся имена параметров) /// и сведений о параметрах (SqlType и значения, возвращенные методом .ToString()) /// в одну строку SQL (в которой содержатся текстовые представления значений). /// Выполнение этой строки не должно отличаться от выполнения исходного запроса, за исключением /// предельных вариантов (например, строка содержит имя параметра или для десятичного числа указана слишком большая точность) /// </summary> /// <param name="qt">текст запроса и сведения о параметрах</param> /// <returns>строка SQL для выполнения</returns> internal static string GetQueryTextWithParams(SqlQueryText qt) { string s = qt.Text; for (int i = qt.Params.Length - 1; i >= 0; i--) { ParameterText param = qt.Params[i]; string val; switch (param.SqlType.ToString()) { case "String": case "Guid": case "DateTime": val = QuoteString(param.Value); break; case "Boolean": if (param.Value == "True") { val = "1"; } else if (param.Value == "False") { val = "0"; } else { throw new ArgumentException("Boolean value other than True or False"); } break; case "Time": TimeSpan ts = TimeSpan.Parse(param.Value); val = ts.Ticks.ToString(CultureInfo.CurrentUICulture); break; default: val = param.Value; break; } s = s.Replace(param.Name, val); } return(s); }
private static SqlQueryText[] GetFullQueryInfo(DataContext dataContext, IQueryable query) { System.Data.Common.DbCommand dbCommand = dataContext.GetCommand(query); SqlQueryText[] result = new SqlQueryText[1]; for (int i = 0, n = 1; i < n; i++) { result[i].Text = dbCommand.CommandText; int nParams = dbCommand.Parameters.Count ; result[i].Params = new ParameterText[nParams]; for (int j = 0; j < nParams; j++) { ParameterText param = new ParameterText(); System.Data.Common.DbParameter pInfo = dbCommand.Parameters[j]; param.Name = pInfo.ParameterName; param.SqlType = pInfo.DbType.ToString(); object paramValue = pInfo.Value; if (paramValue == null) { param.Value = null; } else { param.Value = pInfo.Value.ToString(); } result[i].Params[j] = param; } } return result; }