private DbCommand CreateCommand(SQLQuery query, DbConnection connection, DbTransaction transaction = null) { var command = DbFactory.CreateCommand(); command.Connection = connection; AddParameters(command, query); command.CommandText = query.ModifiedSQL; command.CommandType = query.CommandType; if (transaction != null) { command.Transaction = transaction; } return(command); }
private void DumpSqlAndParamsToLog(SQLQuery query) { if (LogMessage == null || !DebugLoggingEnabled) { return; } var sb = new System.Text.StringBuilder(); sb.AppendFormat("About to execute \"{0}\" ", query.ModifiedSQL); if (query.Parameters.Count > 0) { sb.Append(" with parameters:\r\n"); foreach (string key in query.Parameters.Keys) { sb.AppendFormat("{0}={1} with type {2}.\r\n", key, query.Parameters[key], query.Parameters[key].GetType()); } } else { sb.Append(" with no parameters."); } LogDebug(sb.ToString()); }
private void AddParameters(DbCommand command, SQLQuery query) { foreach (string paramName in query.InParameters.Keys) { if (query.InParameters[paramName] != null && query.InParameters[paramName].Any() && query.ModifiedSQL.Contains("@" + paramName)) { var parameterDictionary = new Dictionary <string, object>(); foreach (var value in query.InParameters[paramName]) { parameterDictionary.Add(string.Format("{0}{1}", paramName, parameterDictionary.Count), value); } //TODO: this needs to be a regex otherwise it could be prone to replacing paramName that starts with the same name eg. @myvar & @myvar2. query.ModifiedSQL = query.ModifiedSQL.Replace("@" + paramName, string.Join(",", parameterDictionary.Select(pd => "@" + pd.Key))); foreach (var parameter in parameterDictionary.Keys) { query.Parameters.Add(parameter, parameterDictionary[parameter]); } } } foreach (string paramName in query.Parameters.Keys) { command.Parameters.Add(CreateParameter(paramName, query.Parameters[paramName])); } }
public void RunQuery(SQLQuery query) { RunQuery(new[] { query }, TransactionOpen); }
public async Task RunQueryAsync(SQLQuery query) { await RunQueryAsync(new[] { query }, TransactionOpen); }