网站开发之前言(二)

在上一篇中,我主要是讲了我在做网站前端开发的时候所遇到的问题,在本节中我就具体的说说在后台C#代码编写过程中遇到的问题吧:

1.首先就是数据库操作的问题,按理说这块我是最熟悉的了,还有网上的例子作参考,应该不会出问题的才是,可是偏偏就是阴沟里翻船,栽在了自己最有把握的地方了,因为之前我一直使用SqlServer数据库做开发,对Oracle数据库了解的不多,但是进入公司后,大部分都是用Oracle数据库进行开发,所以这次网站开发也用到了Oracle数据库。所以在编写数据访问层的增删改查时,我还是按照以前OleDb的写法拼写SQL语句,这在没有用到数据库参数传递时一切正常,但是考虑到数据库安全问题,就改用参数传递了,当然还是按照OleDb的参数传递规则,在参数前面加@,结果在执行的时候就报错了,在网上查了下,原因是因为Oracle数据库不支持@符号,要想通过OleDb进行Oracle数据库参数传递,就只能用?进行代替了,可是这样一来造成的问题就是必须保证参数是一一对应的,不然肯定出问题,这种写法太僵化了,只能废弃,改用System.Data.OracleClient,在使用OracleClient之前必须要先添加System.Data.OracleClient引用,然后才能使用,这样在传递参数的时候前面就不能在用@符号了,而要改用:符号,经过这么一折腾,最终总算是搞定了。

2.数据库事务问题,由于至此的业务逻辑设计到单据,这样就免不了有单据头和单据明细,对于单据头和单据明细的操作为了保证数据的完整性就必须要用到事务,其实在C#中应用数据库事务倒也不是麻烦的事情,就是几行代码的事情,请看如下代码

 1   OracleConnection myConnection =new OracleConnection(myConnString);
2 myConnection.Open();
3
4 OracleCommand myCommand = myConnection.CreateCommand();
5 OracleTransaction myTrans;
6
7 // Start a local transaction
8 myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted);
9 // Assign transaction object for a pending local transaction
10 myCommand.Transaction = myTrans;
11
12 try
13 {
14 myCommand.CommandText ="INSERT INTO Dept (DeptNo, Dname, Loc) values (50, 'TECHNOLOGY', 'DENVER')";
15 myCommand.ExecuteNonQuery();
16 myCommand.CommandText ="INSERT INTO Dept (DeptNo, Dname, Loc) values (60, 'ENGINEERING', 'KANSAS CITY')";
17 myCommand.ExecuteNonQuery();
18 myTrans.Commit();
19 Console.WriteLine("Both records are written to database.");
20 }
21 catch(Exception e)
22 {
23 myTrans.Rollback();
24 Console.WriteLine(e.ToString());
25 Console.WriteLine("Neither record was written to database.");
26 }
27 finally
28 {
29 myConnection.Close();
30 }

  

这个倒是没有什么太难的地方,要说明的一点就是在使用OracleTransaction的时候,数据库是不能关闭的,必须要等所有的数据操作执行完毕之后才能关闭数据连接。

3.这次因为系统比较简单我就直接建了一个ASP.NET Web 应用程序,但是在这个工程里面竟然没有App_Code文件夹,因为本人是个比较喜欢系统默认规则的人,所以就手动添加了这个文件夹,可是接着问题出现了,我在这个文件夹里面建了一个类,但是我在网页中竟然没有办法引用,任凭我使劲浑身解数,就是死活找不到我写的那个类,难道这个是VS2008的BUG吗?但是随即就被我否定了,百度了一下,发现是要把类文件属性中的“生成操作”由“内容”改为“编译”

如图中所示,这样改过之后,就能在这个工程中自由的引用了,但是至于说为什么要这样改,我在网上还没有查到原因,如果有知道的大牛们请告诉我一声,不胜感激。

到此为止,我的网站基本功能已经搞定了,剩下的就是一些页面效果修饰和流程调试了,但是接下来的工作也不轻啊,不过麻烦的问题都已经解决的差不多了,我想下面的问题应该难不倒我。以前太不用功了,所以才导致今天这种困难的局面,看来以后要好好加把劲了,不然就真的要被淘汰出局了。

原文地址:https://www.cnblogs.com/QSuperstar/p/2130387.html