oracle使用US7ASCII字符集在存储。
没有安装oralce client的客户端,我把一些必要的dll拷贝到自己程序下(oci.dll,oraociei11.dll这些),是可以访问数据库的。
使用微软的oledb驱动的方式访问数据库。
连接字符串如下:
Provider=msdaora;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=172.18.100.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORACLE)));User Id=123;Password=123;
程序代码如下:
System.Environment.SetEnvironmentVariable("NLS_LANG", "American_America.US7ASCII",EnvironmentVariableTarget.Process);
string connStr = ConfigurationManager.ConnectionStrings["Hosp"].ConnectionString;
using (OleDbConnection conn = new OleDbConnection(connStr))
{
conn.Open();
StringBuilder sqlSb = new StringBuilder();
sqlSb.Append("insert into HHRIS.R_BLREQUSITION (HISID,PHOTONO,STUDYID,PATNAME,Sex,Age,");
sqlSb.Append("LODGESECTION,LODGEDOCTOR,INHOSPITALNO,BEDNO,DIAGNOSIS,CHECKDATE,CHECKDOCTOR,REPORTDOCTOR,");
sqlSb.Append("RESULT,REPORTDATE,CLASSNAME,PARTOFCHECK,HisExamNo)");
sqlSb.Append("values (?,?,?,?,?,?,");
sqlSb.Append("?,?,?,?,?,?,?,?,");
sqlSb.Append("?,?,?,?,?)");
OleDbParameter[] parameters = new OleDbParameter[]{
new OleDbParameter("HisId",SqlHelper.ToDbValue(ecgEntity.PatientId)),
new OleDbParameter("PhotoNo",photoNo),
new OleDbParameter("StudyId",studyId),
.......
另外还有一个update的函数,代码与以上类似
也是先设定环境变量后的操作
问题如下:
插入中文到数据库中,有的时候是正常的,有的时候是乱码(显示为问号)。
我发现错误后,update一次,又能正常update成中文。
所以我很不解其原因?
请问:
要保持正确的insert,update数据库的话,应该如何操作?