博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于C#的微信开发的入门记录二
阅读量:7103 次
发布时间:2019-06-28

本文共 6074 字,大约阅读时间需要 20 分钟。

在准备了空间和域名之后,现在来讲讲我们接下来的编码过程:

 今天就先到这里了!没有服务器那些的请看我之前的博客:http://www.cnblogs.com/zhankui/p/4515905.html

不会域名解析的请看:http://www.cnblogs.com/zhankui/p/4517333.html

 
   

因为我拿到手的项目是要做一个微信教务系统,所以呢我这里肯定是要用到数据库的,所以代码总放在一起不好看,也不方便修改,所以采用分层的方式来进行编码,我的分层如下图所示:

顺便提一下三层架构:

三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(Presentation layer)、业务逻辑层(Business Logic Layer)(BLL)、数据访问层(Data access layer)(DAL)。区分层次的目的即为了“”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层(我这里是用UI表示)。

1::主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.

2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。

3:表示层:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。

剩下的MODEL和DBUtility分别是:

         1:MODEL模型层,这是一个实体类,具体作用已经有大神写过了欢迎围观,地址:http://www.cnblogs.com/sdjxcolin/archive/2008/12/12/1353780.html

         2:DBUtility(database utility)数据库功能,这里呢其实本来可以和DAL放在一起的,但是不太方便,所以分离出来,这里就是放的不同数据库的访问功能(查询语句,非查询语句)。

         层分好了,现在就是建立与数据库的连接了,在UI层,有一个Web.config配置文件,我们会将数据库的连接字符串放在这里(也就是连接到哪个服务器,用户名密码的一个验证),那有朋友可能就要问了,为啥要放这儿是吧,之前老师讲课的时候,开小差了,没听到,所以后来又补了补,原因为:Web.config文件是一个XML文本文件,它用来储存ASP.NETWeb 的配置信息(如最常用的设置ASP.NETWeb 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录下新建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。

在运行时对Web.config文件的修改不需要重启服务就可以生效(注: 节例外)。当然Web.config文件是可以扩展的。你可以自定义新配置参数并编写配置节处理程序以对它们进行处理。

处理如下(将connectionStrings里的中文改成你实际的参数即可):

  

接下来就是DBUtility了,因为我这里使用的是sql server数据库所以我取名为sqlHelper.cs为啥呢,通过名字可以看出来,这是个数据库帮助文件,帮助什么呢?那就是我们把数据库的操作(增删查改)放在这里面,但是我们要引入以下三个命名空间:

using System.Configuration;

using System.Data.SqlClient;

using System.Data;

科普一下常用基本的:

using System; 主命名空间,包含所有.net基础类型和通用类型,比如Object,比如string等等

using System.Collections; 集合命名空间,包含常用的如ArrayList等集合类
using System.Configuration; 配置命名空间,包含应用程序配置相关的类比如ConfigurationManager
using System.Data; 数据命名空间,包含ado.net最基础的类型,比如DbConnection等
using System.Linq; 3.5引入的linq语法需要提供的支持类,主要包含了Enumerable扩展方法支持类
using System.Web; asp.net所需要的核心命名空间,包含诸如HttpRuntime等的基础运行环境类
using System.Web.Security; asp.net在角色验证和安全方面的类库,比较重要的是FormsAuthentication
using System.Web.UI; asp.net web page控件所需要的基本命名空间,包含所有如Control或者重要的IPostbackeventhandler接口等
using System.Web.UI.HtmlControls; html原生控件,如input runat=server会映射到这里面的某个InputXxx控件类
using System.Web.UI.WebControls; 服务器控件,如GridView就是在这个里面
using System.Web.UI.WebControls.WebParts; WebParts技术所需要的空间,不过很少用
using System.Xml.Linq; linq2xml的主命名空间,包含XDocument和XElement比较重要的类
using System.Data;

 

引入命名空间完成后:

//数据库连接字符串

Public static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["SQLConn"].ConnectionString;

这是从我们之前的配置文件中读取出:

<connectionStrings>

      <add name="SQLConn" connectionString="Server=服务器名字;database=数据库名字;uid=用户名;pwd=密码"/>

</connectionStrings>

不过当按照我的做完以后,会报错,提示找不到ConfigurationManager,为什么呢?这个确实是在configuration命名空间里的是吧,因为没有添加引用右击DBUtility——》添加——》引用(不是服务引用)——》框架里面有一个:System.Configuration,勾上添加完这个程序集以后就可以个;那一行代码就不会报错,我们的数据库连接字符串算是从配置文件搞出来了,接下来就是配置了,避免每次都要设置这些,直接拿出来单独写一下,以后直接拿着用:

private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] values)在这里:cmd是命令对象conn是连接对象trans是事务类型cmdType是命令类型cmdText是命令文本values是 参数        {            if (conn.State != ConnectionState.Open)            {                conn.Open();            }            cmd.Connection = conn;            cmd.CommandType = cmdType;            cmd.CommandText = cmdText;            if (trans != null)            {                cmd.Transaction = trans;            }            if (values != null)            {                foreach (var item in values)                {                    cmd.Parameters.Add(item);                }            }        }

  

接下来写非查询语句:

public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] values)        {            SqlCommandcmd=newSqlCommand();//实例化命令对象            using (SqlConnectionconn=newSqlConnection(ConnectionString)) //实例化连接对象            {                PrepareCommand(cmd, conn, null, cmdType, cmdText, values);//为命令准备各种属性                intval=cmd.ExecuteNonQuery(); //调用执行                cmd.Parameters.Clear(); //清除参数                returnval;            }        } public static int ExecuteNonQuery(SqlConnection conn, CommandType cmdType, string cmdText, params SqlParameter[] values)        {            SqlCommand cmd=newSqlCommand();            PrepareCommand(cmd, conn, null, cmdType, cmdText, values);            intval=cmd.ExecuteNonQuery();            cmd.Parameters.Clear();            returnval;        }

  

查询语句(数据读取器):

public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] values)        {            SqlCommand cmd=newSqlCommand();            SqlConnectionconn=newSqlConnection(connectionString);            try            {                PrepareCommand(cmd, conn, null, cmdType, cmdText, values);//为命令准备各种属性                SqlDataReader rdr=cmd.ExecuteReader(Command Behavior.CloseConnection);                cmd.Parameters.Clear();                returnrdr;            }            catch            {                conn.Close();                throw;            }        } public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] values)        {            SqlCommand cmd=newSqlCommand();            using (SqlConnection conn=new SqlConnection(connectionString))            {                PrepareCommand(cmd, conn, null, cmdType, cmdText, values);//为命令准备各种属性                objectobj=cmd.ExecuteScalar();                cmd.Parameters.Clear();                returnobj;            }        }

 

 今天就先到这里了!没有服务器那些的请看我之前的博客:http://www.cnblogs.com/zhankui/p/4515905.html

不会域名解析的请看:http://www.cnblogs.com/zhankui/p/4517333.html

转载于:https://www.cnblogs.com/zhankui/p/4523869.html

你可能感兴趣的文章
搜集用 LLVM 创造动态语言的例子
查看>>
第159天:前端知识体系框架
查看>>
Spring AOP注解为什么失效?90%Java程序员不知道
查看>>
Linq SQL 动态个数where查询
查看>>
day09_request&response学习笔记
查看>>
如何设置 Kubernetes 资源限制
查看>>
以太坊学习之开发编译部署调用智能合约
查看>>
Android 自定义 permission
查看>>
[20171225]没有备份数据文件的恢复.txt
查看>>
精通SpringBoot——第五篇:写一个spring-boot-starter包
查看>>
Json学习
查看>>
Airbnb: React Native 从选择到放弃
查看>>
Eclipse中Tomcat配置问题
查看>>
Honda Connect应用程序泄漏超过50,000名用户的个人信息
查看>>
Fujikura Ltd联合NTT Docomo Inc开展测试,要将直接甲醇燃料电池用于灾区应急场景中...
查看>>
Linux下使用split按行数进行切割
查看>>
英国伦敦成为首个获得区块链技术领域专利的国家
查看>>
盘点2015年英特尔旧金山IDF峰会上的黑科技
查看>>
解读《新一代人工智能发展规划》,企业如何才能迎来产业高潮
查看>>
「镁客·请讲」云从孙庆凯:不能盈利再多技术也是枉然,2018年将是市场洗牌期...
查看>>