попробуйте использовать функцию instr?
select my_column from my_table where instr(?, ','||search_column||',') > 0
, тогда
ps.setString(1, ",A,B,C,");
По общему признанию, это немного грязный взлома, но это уменьшает возможности для SQL-инъекции. Все равно работает в oracle.
Почему это не полностью тривиально? выполнение запроса не и особенно не контакт с результатами и кажется, что существуют некоторые ошибки.NET, включенные также - см. https://social.msdn.microsoft. com/Forums/en-US/d8d87789-0ac9-4294-84a0-91c9fa27e353/bug-in-httpclientgetasync-should-throw-webexception-not-taskcanceledexception? forum=netfxnetcom
я закончил с этим кодом:
static async Task<(bool Success, WebExceptionStatus WebExceptionStatus, HttpStatusCode? HttpStatusCode, string ResponseAsString)> HttpRequestAsync(HttpClient httpClient, string url, string postBuffer = null, CancellationTokenSource cts = null) {
try {
HttpResponseMessage resp = null;
if (postBuffer is null) {
resp = cts is null ? await HttpClient.GetAsync(url) : await HttpClient.GetAsync(url, cts.Token);
} else {
using (var httpContent = new StringContent(postBuffer)) {
resp = cts is null ? await HttpClient.PostAsync(url, httpContent) : await HttpClient.PostAsync(url, httpContent, cts.Token);
}
}
var respString = await resp.Content.ReadAsStringAsync();
return (resp.IsSuccessStatusCode, WebExceptionStatus.Success, resp.StatusCode, respString);
} catch (WebException ex) {
WebExceptionStatus status = ex.Status;
if (status == WebExceptionStatus.ProtocolError) {
// Get HttpWebResponse so that you can check the HTTP status code.
using (HttpWebResponse httpResponse = (HttpWebResponse)ex.Response) {
return (false, status, httpResponse.StatusCode, httpResponse.StatusDescription);
}
} else {
return (false, status, null, ex.ToString());
}
} catch (TaskCanceledException ex) {
if (ex.CancellationToken == cts.Token) {
// a real cancellation, triggered by the caller
return (false, WebExceptionStatus.RequestCanceled, null, ex.ToString());
} else {
// a web request timeout (possibly other things!?)
return (false, WebExceptionStatus.Timeout, null, ex.ToString());
}
} catch (Exception ex) {
return (false, WebExceptionStatus.UnknownError, HttpStatusCode.NotImplemented, ex.ToString());
}
}
Это сделает, ПОЛУЧЕНИЕ или POST зависят, если postBuffer
является пустым или не
, если Успех верен, что ответ тогда будет в ResponseAsString
, если Успех будет ложью, можно проверить WebExceptionStatus
, HttpStatusCode
и ResponseAsString
, чтобы попытаться видеть то, что пошло не так, как надо.
я приветствую комментарии к этому как я все еще не уверенный, что это покрывает все случаи.