NekoNao Ответов: 1

Буфер, передаваемый системному вызову, слишком мал, чтобы содержать ошибку возвращаемых данных


Я смог подключиться к
iSeries Access ODBC Driver
использование ASP.Net.
Простое предложение where и select работает, но когда я столкнулся с предложением WHERE IN, оно отбрасывает ошибку.
Мой код выглядит следующим образом:

Dim sql as string = " Select * from table where column in (?)"

УМК.Параметры.Добавить("", Через ODBC.OdbcType.Тип char).Значение = txt_Param.Текст

и мое текстовое поле будет иметь значение 'a', 'b', 'c'


Я получаю эту ошибку:

ERROR [22018] [IBM][iSeries Access ODBC Driver]Column 1: CWB0111 - A buffer passed to a system call is too small to hold return data ERROR [22001] [IBM][iSeries Access ODBC Driver]Column 1: Character data right truncation.


Я понял, что параметры-это один к одному. как у меня будет много параметров в odbc?

Что я уже пробовал:

Пробовал менять строку и добавлять запятые, но это не работает

1 Ответов

Рейтинг:
10

Richard Deeming

Что-то вроде этого:

Dim sql As New StringBuilder("SELECT * FROM table WHERE column IN (")

Dim parts As String() = txt_Param.Text.Split(","c)
For i As Integer = 0 To parts.Length - 1
    cmd.Parameters.Add("", Odbc.OdbcType.Char).Value = parts(i)
    If i <> 0 Then sql.Append(", ")
    sql.Append("?"c)
Next

sql.Append(")"c)
cmd.CommandText = sql.ToString()

Возможно, вы захотите взглянуть на Щеголеватый[^], что делает этот вид запроса намного проще.