Oracle 数据库使用 sql语句 : select lengthb('输入字符串') from dual , 来计算 字符串 所占的字节长度(比如,一个汉字3个字节),但是用这个lengthb函数时,输入字符串的长度不能超过4000,这样遇到一些超长字符串就不行了,因此,需要用下面的三个vb.net函数来配合获取:
PrivateFunctiongetStrLength_long(strInputAsString)AsInteger
'Try
Dimlist_strsAsList(OfString) = getList_shortStrs(strInput)
DimtotalLengthAsInt16= 0
ForEach_strInlist_strs
totalLength += getStrLength_short(_str)
Next
ReturntotalLength
'Catch ex As Exception
' MessageBox.Show("当前输入的有特殊字符,不容许 " & ex.ToString)
' Return 0
'End Try
EndFunction
'''
''' 这个函数的功能,是将输入的一个长字符串转化为 由若干条较短的字符串组成的列表
''' 本函数是为了测算字符串的长度而做配套的,
''' oracle在测算字符串长度时,字符串长度不能超过4000个字节,否则会出错
''' 所以,将一条长字符串转化为若干条短字符串,对每条短字符串分别测算长度,再累加起来,即长字符串的长度
'''
'''输入的一个长字符串
'''
PrivateFunctiongetList_shortStrs(strInputAsString)AsList(OfString)
DimlengthValueAsInt16= 1000' 阈值, 短字符串的长度
' 之所以定为 1000 ,是因为即使这1000个字符全是汉字,1000 *3 = 3000,仍然小于 4000
Dimlist_strsAsList(OfString) =NewList(OfString)
DimtotalLengthAsInt16= strInput.Length' 名义上的总长度
IftotalLength < lengthValueThen' 如果名义长度 小于 阈值
list_strs.Add(strInput)
Returnlist_strs' 返回
EndIf
' 现在知道该字符串 的长度 超过阈值了,需要处理
Dimii = 0
While(ii + 1) * lengthValue <= totalLength' 对长字符串进行 分段
list_strs.Add(strInput.Substring(ii * lengthValue, lengthValue))
ii += 1
EndWhile
' 最后一小段字符串
list_strs.Add(strInput.Substring(ii * lengthValue, strInput.Length - ii * lengthValue))
Returnlist_strs' 返回
EndFunction
' 下面这个函数只能对较短的字符串(长度不超过4000)判断长度
PrivateFunctiongetStrLength_short(strInputAsString)AsString
IfstrInput.Length = 0Then
Return0
EndIf
' 下面,直接根据Oracle数据库的判读字符串长度的方法来判断
' lengthb(string)计算string所占的字节长度: select lengthb('¥') from dual
DimstrSqlAsString="select lengthb('"& strInput &"') from dual"
DimrsAsNewADODB.Recordset
DimdaAsNewData.OleDb.OleDbDataAdapter()
DimcmdAsNewADODB.Command
cmd.CommandText = strSql
cmd.ActiveConnection = conn
cmd.CommandType = CommandType.Text
'Try
rs = cmd.Execute() ' 执行
'Catch ex As Exception
' 'MessageBox.Show("当前输入的字符串有特殊字符,无法判断长度")
' Return "过长或特殊字符,无法判断长度"
'End Try
IfNotrs.EOFThen
Returnrs.Fields(0).Value.ToString
EndIf
Return""
EndFunction