本机开发环境:VS2005(2.0框架)+Oracle8i客户端+IIS5.1 +WINDOWS XP
服务器:Oracle92 +WINDOWS2003+IIS6.0
公司要在原有程序基础上加个批量修改功能,相当于是二次开发,以前很少连接ORACLE数据库,一开始就遇到连数据的问题, 开始用using system.Data.Oledb,死活连不上,后来改为using system.Data.OracleClient这样连接就和SQL一样的写法了,当然是轻车熟路
string oracleConn="Data Source=iagent;User ID=iagent;Password=ia;Unicode=True";
oleCon = new OracleConnection(oracleConn);
当然最好是写在Web.Config里,安全些
第二个问题 SQL语句,SQL里的两种写法
string upSql="update orderhist set mailtype=@mailtype where orderid=@orderid";
string upSql="update orderhist set mailtype=' "+mailtype+" ' where orderid=' "+orderid+" ' ";
Oracle中写SQL语句有以下几种方式:
string upSql="update orderhist set mailtype=:mailtype where orderid=:orderid";
OracleCommand oraCmd=new OracleCommand();
oraCmd.parameters.Add("mailtype",OracleType.Varchar).value=mailtype;.........搞定
或者是这样写
string upSql="update orderhist set mailtype="+"? where orderid="+"?";
OracleCommand oraCmd=new OracleCommand();
oraCmd.parameters.Add("@mailtype",OracleType.Varchar).value=mailtype;.
oraCmd.parameters.Add("@orderid",OracleType.Varchar).value=orderid;.也行.......
或者是:
string upSql="update orderhist set mailtype=' "+mailType+" ',' " where orderid=' "+orderId+" ' ";
第三个问题部署:
程序写完了,在本地部署访问没问题了,一上传到服务器就报错 说找不到程序集,又是找了N长时间,服务器用的是IIS6.0自带的.NET Framework 1.0 我用的是2.0,不报错才怪,服务器装上VS2005就OK了,又报其它的错误说:System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本,但是我在服务器上装的是ORACLE92,不低啊,一查才知道是权限问题,具体解决方法参考:http://hi.baidu.com/yanguang1670/blog/item/8677d124f83fa7308744f91c.html,改了之后重启一下服务器OK,问题解决了
虽然程序功能很简单但是却费了一番功夫,写程序一定要小心,仔细,少犯低级错误
最近在原有基础上又加了两列 发货时间(senddt date类型) 运单编号(mailid varchar2类型) 两列均采用模板列,senddt如下:
<asp:TemplateField HeaderText="发货时间">
<ItemTemplate>
<asp:TextBox id="txtTime" type="text" runat="server" οnfοcus="new WdatePicker(this,'%Y-%M-%D',true)" mindate="2008-8-1" Text='<%# Eval("senddt","{0:d}") %>' Width="123px"/>
<br/>
</ItemTemplate>
<ItemStyle Width="90px" />
</asp:TemplateField>
采用了My97DatePicker,刚开始用的是4.2版本总报错说calendar.js中$FF未定义,后来没办法改成3.0 版本就OK了,还加了一张表 operatorFile(操作日志)
create table operatorFile
(
Oid number primary key,
Otime date, --操作时间
Oname varchar2(100),--操作名称
UserName varchar2(10)--操作人姓名
)
oid 自动增长
create sequence seq_operId
start with 1
increment by 1
nomaxvalue
nocycle
因为要在程序中插入数据,所以创建一个触发器触发序列
create or replace trigger trig_oper before insert on operatorfile for each row
begin
select seq_operid.nextval into :NEW.oid from dual;
end;
开始写成了 select seq_operid.nextval into New.oid from dual 报错:触发器无效且未通过确认,后来才发现少了:
晕死
写程序一定要小心,看似简单的东西 稍不注意就错了
程序部署也得注意,XP 系统上不支持装IIS6.0,使用的服务器环境为Win2003+IIS6.0+SQLSERVER2000 , IIS上原来部署有.NET1.0的程序,后来我写的另一个程序时2.0版本的,部署上去访问就报错:
Server Application Unavailable
当时就蒙了,后来一查原来1.0和2.0的版本放在同一IIS上会出错,具体解决办法见:http://www.cnblogs.com/cwbboy/archive/2006/07/11/339710.html
还有IIS6.0默认情况下Web服务扩展里ASP服务时被禁用的,被禁用的还有CGI扩展,ISAPI扩展,Internet数据连接器,WebDAV,在服务器端的包含文件 ,如果程序部署上去出现404的错误,有可能就是相关的服务被禁用了,尽量不要把发布的程序放在C盘下面,有可能会造成无法访问
记于20090806
20090921新进展
在原有基础上加了水晶报表功能 本地运行OK后上传到服务器报错:
Server Error in '/report' Application
Parser Error Message: Could not load file or assembly 'CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. 系统找不到指定的文件。
Line 57: -->
Line 58: <httpHandlers><add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/></httpHandlers></system.web>
Line 59: </configuration>
错误意思是说无法加载 记录水晶报表信息的程序集
解决方案如下:
在C盘搜索 CRRedist2005_x86.msi 上传到服务器 并安装 就OK拉,该程序记录的是水晶报表的相关信息
总之部署程序要记住的是:服务器上的环境必须和本机上开发的环境保持一致 ,当然操作系统等除外,有的时候由操作系统造成的权限问题而导致出错的例子也非常多 如果本地和服务器上的完全保持一致那倒可以省去很多麻烦 当然这是理想情况 正所谓兵来将挡 水来土掩
遇到的问题多了 慢慢就有经验了
2010-01-09
装了个虚拟机,是Windows2003的操作系统,ASP.NET应用程序部署在虚拟机上,在虚拟机上可以访问 但是在本机不能访问,找了半天 原来是把虚拟机的 VMware Network Adapter VMnet8 给禁用了 ,启用就OK了