Ошибка Oracle ORA-01461: может связывать значение LONG только для вставки в столбец LONG - PullRequest
0 голосов
/ 04 октября 2018

Я делаю что-то не так при обновлении запроса в .Net.Я получаю ошибку, и это единственный способ, которым я знаю.Есть ли другой способ обновить документ массива байтов в базу данных оракула.Условия все хорошие, я проверял во время отладки.

Dim data As Byte() = lDS.Rows(0)(pFieldName)             
Dim strData As String
Using fs As New FileStream(pFileName, FileMode.Open, FileAccess.Read, FileShare.Read)
    Dim br As New StreamReader(fs)
    strData = br.ReadToEnd()
    br.Close()
End Using

Dim oradb As String
oradb = String.Format("Data Source={0};User Id={1};Password={2};", lOracleDB, lUserID, lPassword)
Dim conn As New OracleConnection(oradb)

conn.Open()

Dim strCondition As String = pSQL.ToLower()
strCondition = strCondition.Substring(pSQL.IndexOf("where"), pSQL.Length - pSQL.IndexOf("where") - 1)
Dim sql As String = "UPDATE " + tableName + " SET " + pFieldName + " = :" + pFieldName + " " + strCondition

Dim parmData As OracleParameter = New OracleParameter
parmData.Direction = ParameterDirection.Input

parmData.OracleType = OracleType.Clob
parmData.Size = strData.Length

parmData.ParameterName = pFieldName
parmData.Value = strData
Dim cm As OracleCommand = New OracleCommand
cm.Connection = conn
cm.Parameters.Add(parmData)
cm.CommandText = sql
'At below line I am getting the error
cm.ExecuteNonQuery()
conn.Close()

1 Ответ

0 голосов
/ 04 октября 2018

Ваш код ужасно многословен.Подробный код не является неправильным, его труднее читать и, следовательно, он более подвержен ошибкам.Если вы хотите сохранить двоичные данные из файла в базу данных, вы можете сделать это довольно просто, например:

Dim data = File.ReadAllBytes(filePath)

Using connection As New OracleConnection(connectionString),
      command As New OracleCommand("UPDATE MyTable SET MyColumn = :MyColumn", connection)
    command.Parameters.Add("MyColumn", OracleType.Blob, -1).Value = data

    connection.Open()
    command.ExecuteNonQuery()
End Using

Я не использую Oracle, поэтому я не уверен, работает ли он точно так жекак SQL Server, но третий параметр Add - это размер столбца, а -1 используется для MAX.Это может или не может быть применимо к столбцу BLOB, поэтому пропустите этот аргумент, если это не так, и установите для него соответствующее значение, если это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...