NOTA: também publiquei esta solução para: link
Oi,
Também fui "apanhado" com este "problema".
De fato, isso não é um problema:
O PROBLEMA (EXEMPLO)
Eu tive o mesmo problema ao usar dados booleanos em uma instrução SQL.
No meu servidor francês, minha instrução SQL era a seguinte:
<%
'Set my boolean value
Dim myBoolean
myBoolean = True
'Set my SQL Statement
Dim MySQLStatement
MySQLStatement = "SELECT * FROM MyTable WHERE MyBooleanField = " & myBoolean
'=> Here, as MySQLStatement is a STRING, the boolean data was "converted/rendered" as a localized string. So that leads to this output :
'=> SELECT * FROM MyTable WHERE MyBooleanField = Vrai
'Obviously, that SQL Statement is incorrect, because the SQL Engine does NOT understand what is the "Vrai" word - It should be "True" instead.
%>
AS EXPLICAÇÕES:
- Não importa quais configurações regionais estão definidas no sistema do Windows: nada acontece com os dados subjacentes. Um tipo de dados booleano é STILL a BOOLEAN , em inglês, francês, alemão, russo, tailandês, ou qualquer outro idioma desejado.
- O fato é que os dados estão sendo RENDERED como STRING >> (como datas).
A SOLUÇÃO
Após muitas leituras em encadeamentos de fóruns, a solução não é alterar as configurações regionais no sistema Windows, nem alterar as chaves do Registro, nem alterar Session.LCID, ...
A solução absoluta e somente de código é converter o valor booleano (True | False) em um Integer (0 | 1) . Então, este Integer será seguramente utilizável em uma string e permanecerá (0 | 1).
Aqui está o caminho seguro para usar / converter / renderizar um valor booleano em um formato não localizado: Use um valor Integer .
<%
'Set my boolean value
Dim myBoolean
myBoolean = True
'Set my SQL Statement
Dim MySQLStatement
MySQLStatement = "SELECT * FROM MyTable WHERE MyBooleanField = " & BoolToInt(myBoolean)
'=> Here, as MySQLStatement is a STRING, and as the boolean data was previously "converted/rendered" as an integer, we got this correct SQL Statement :
'=> SELECT * FROM MyTable WHERE MyBooleanField = 1
'This SQL Statement is correct, as the SQL Engine DOES understand that 1 is a boolean.
'This Function Returns an INTEGER value based on a BOOLEAN value
Function BoolToInt(v)
'INPUT:
'v Boolean value
'OUTPUT:
'Integer (0|1)
Dim b_OUT
b_OUT = v
'If the Input value is a "True" boolean value (in any language)
if (b_OUT = True) then
BoolToInt = cint(1)
'If the Input value is a "False" boolean value (in any language)
elseif (b_OUT = False) then
BoolToInt = cint(0)
end if
End Function 'BoolToInt
%>
Eu realmente espero que você salve o seu dia!