过程如下: 读出来时有中文就会变成乱码,英文可以正常显示。 如何解决?
public static string ReadLob(string table_name,string table_id,string idvalue,int column)
{
OracleConnection myCn = new OracleConnection(System.Configuration.ConfigurationSettings.AppSettings["Oracle"].ToString());
OracleCommand myCmd = new OracleCommand();
try
{
myCn.Open();
}
catch(System.Data.OracleClient.OracleException e)
{
throw new Exception(e.Message);
}
OracleTransaction myTrans = myCn.BeginTransaction();
try
{
myCmd.Connection = myCn;
myCmd.Transaction = myTrans;
myCmd.CommandText = "SELECT * FROM "+ table_name +" where "+ table_id +" = "+ idvalue +" FOR UPDATE";
OracleDataReader reader = myCmd.ExecuteReader();
using(reader)
{
reader.Read();
OracleLob CLOB = reader.GetOracleLob(column);
byte[] buffer = new byte[(int)CLOB.Length];
CLOB.Read(buffer,0,(int)CLOB.Length);
Encoding utf8 = System.Text.Encoding.GetEncoding("utf-8"); string final = utf8.GetString(buffer);
return final;
}
}
catch(System.Data.OracleClient.OracleException e)
{
myTrans.Rollback();
throw new Exception(e.Message);
}
finally
{
myCmd.Dispose();
myCn.Close();
}
}
public static string ReadLob(string table_name,string table_id,string idvalue,int column)
{
OracleConnection myCn = new OracleConnection(System.Configuration.ConfigurationSettings.AppSettings["Oracle"].ToString());
OracleCommand myCmd = new OracleCommand();
try
{
myCn.Open();
}
catch(System.Data.OracleClient.OracleException e)
{
throw new Exception(e.Message);
}
OracleTransaction myTrans = myCn.BeginTransaction();
try
{
myCmd.Connection = myCn;
myCmd.Transaction = myTrans;
myCmd.CommandText = "SELECT * FROM "+ table_name +" where "+ table_id +" = "+ idvalue +" FOR UPDATE";
OracleDataReader reader = myCmd.ExecuteReader();
using(reader)
{
reader.Read();
OracleLob CLOB = reader.GetOracleLob(column);
byte[] buffer = new byte[(int)CLOB.Length];
CLOB.Read(buffer,0,(int)CLOB.Length);
Encoding utf8 = System.Text.Encoding.GetEncoding("utf-8"); string final = utf8.GetString(buffer);
return final;
}
}
catch(System.Data.OracleClient.OracleException e)
{
myTrans.Rollback();
throw new Exception(e.Message);
}
finally
{
myCmd.Dispose();
myCn.Close();
}
}
function dbresult($sql)//查询结果
{
//ECHO $sql."<br>";
$stmt = OCIParse($this->lnkid,$sql);
OCIExecute($stmt,OCI_DEFAULT);
$i = 0;
while (OCIFetchInto($stmt,$sql_array,OCI_ASSOC+OCI_RETURN_LOBS))
{
$numcols = OCINumCols($stmt);
for ($column=1; $column <= $numcols; $column++)
{
$str = strtoupper(OCIColumnName($stmt,$column));
$str_upper = OCIColumnName($stmt,$column);
$return_result[$i][$str] = $sql_array[$str_upper];
}
$i = $i + 1;
}
OCIFreeStatement($stmt);
//当没有记录时给变量赋予一个空数组
if(empty($return_result)){
$return_result=array();
} return $return_result;
}