关于C#的微信开发的入门记录二
在准备了空间和域名之后,现在来讲讲我们接下来的编码过程:
今天就先到这里了!没有服务器那些的请看我之前的博客: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 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录下新建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。
在运行时对Web.config文件的修改不需要重启服务就可以生效(注:
节例外)。当然Web.config文件是可以扩展的。你可以自定义新配置参数并编写配置节处理程序以对它们进行处理。
处理如下(将connectionStrings里的中文改成你实际的参数即可):
<?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime targetFramework="4.5" /> <!--这里要修改成4.0的,因为我的服务器上面有限制,所以大家看好了在修改--> </system.web> <connectionStrings> <add name="SQLConn" connectionString="Server=服务器名字;database=数据库名字;uid=用户名;pwd=密码"/> </connectionStrings> </configuration>
接下来就是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
关于C#的微信开发的入门记录二的更多相关文章
- 续关于C#的微信开发的入门记录一
前几天写了一篇博客<关于C#的微信开发的入门记录一>,原文地址:http://www.cnblogs.com/zhankui/p/4515905.html,现在继续完善: 目前很多小伙伴都 ...
- 关于C#的微信开发的入门记录一
在之前老是看到一些微信开发的例子,但是作为初学者会有很多问题,之前我也找了很多帖子,但是最终也没能解决,现在刚好手里有一个项目,总结一下分享给准备做却动不了手的朋友们,本文只是以我个人的经验作为浅谈( ...
- java微信开发API解析(二)-获取消息和回复消息
java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...
- php微信开发之带参数二维码的使用
最近做微信PC端网页微信相关功能的开发,从一个新手的角度来说,微信公众号的文档还是不好理解的,网上找的帖子大都也都基本上是复制微信公众平台上给的文档,开发微信带参数二维码过程中还是遇到不少坑的,在此把 ...
- Express+Mongoose(MongoDB)+Vue2全栈微信商城项目全记录(二)
用mogoose搭建restful测试接口 接着上一篇(Express+Mongoose(MongoDB)+Vue2全栈微信商城项目全记录(一))记录,今天单独搭建一个restful测试接口,和项目前 ...
- C#微信开发小白成长教程二(新手接入指南,附视频)
距离第一讲又已经过去了一个多星期了,本打算一周更新一讲的,奈何实在太忙.最近也在群里发现有一部分人已经可以熟练调用微信的部分接口但却不是很清楚微信公众平台接收消息的一个处理机制.本讲就来介绍下怎么接入 ...
- [微信开发] - 使用weixin4j进行二次开发
1. 服务器连接配置OK, 配置文件在classpath:weixin4j.properties中 # weixin4j-spring-demo### 使用weixin4j(岸思版)springboo ...
- 微信开发jssdk入门
一个项目需要在微信里获得当前位置,于是就开始了我的微信开发之旅... 微信JSSDK说明文档http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9 ...
- 微信小程序入门(二)
5.安装微信开发者工具 小程序入口文档 点"小程序开发"-->>"工具-->>再点左边的"下载",进行开发者工具的下载 6.小 ...
随机推荐
- 有人要分享pjax吗?
安装 1.在 composer.json 的 require里 加入 "yuanchao/pjax-for-laravel-5": "dev-master" 2 ...
- 循环获取DataTable
DataTable ddtt = tq.Table("); string strName = ""; //DataTable ddtt = dataSet.Tables[ ...
- MFC序列化与反序列化
#pragma once #include "afx.h" #include <vector> using std::vector; class HzyData : p ...
- [Android Pro] Android开发实践:为什么要继承onMeasure()
reference to : http://www.linuxidc.com/Linux/2014-12/110164.htm Android开 发中偶尔会用到自定义View,一般情况下,自定义Vie ...
- js如何求一组数中的极值
这是一个很简单的问题,现在我们从循环开始,例如一组数[5,2,1,3,4];求其中的最大值,那么首先我们要定义一个max的中间变量,遍历数组,当遇到比max值大则赋值给max,直到循环结束,就能获取这 ...
- 常用 Git 命令
拉取远端仓库代码: 如果本地已经存在文件夹,先cd进去,然后敲命令: git fetch (作用是拉取远端仓库里的代码) git merge (作用是将远端仓库里的代码与本地仓库里的代码合并,如果有冲 ...
- CentOS安装gitLab服务器
首先利用gitlab-install-el6.sh安装,比较简单: (出处:http://www.linuxidc.com/Linux/2013-06/85754.htm) 1:如果有条件,提供一台全 ...
- iOS-APP提交上架流程(新手必看!2016年3月1日最新版)
自己的经验总结,有错的话请留言,第一时间更改. 先大概说一下iOSAPP上架的几个步骤(详细步骤见下图): 创建证书请求文件 登录苹果开发者中心生成发布者证书(下载下来要双击一下) 设置APPID(要 ...
- Xamarin 与VS2015RC(xamarin 3.11.450) 报空指针错误。
在Android开发中发现的一个“初步认为是调试器的bug”. 于早些时候发布在公司论坛上,传送门: http://www.newlifex.com/showtopic-1400.aspx 使用vs2 ...
- resin实现热部署配置
修改resin.xml文件 <host id="test.com" root-directory="."> <host-alias>te ...