本教程设及到:使用SQL Server查询分析器创建数据库;SQL查询语句常用的一些属性值;触发器创建和使用;存储过程的创建,ASP使用存储过程。

正文:

一、创建数据库:

创建一个feedback数据库,该数据库的主数据文件的逻辑名称是feedback,操作系统文件是feedback.mdf

Create Database feedback --创建数据库feedback

On {语法错误?}

Primary (

Name=feedback,

Filename='d:\feedback.mdf',   --数据库操作系统文件的目录和名称

Size=15MB,

Maxsize=30MB,

Filegrowth=20%)

Log On

(Name=feedback_log,

Filename='d:\feedback.ldf',

Size=3MB,

Maxsize=10MB,

FileGrowth=1MB)

USE feedback   --打开数据库

二、创建两个表,一个用来作留言,一个作留言的回复!

1、创建第一个表:Feedback存放留言的记录!

Drop Table Feedback  --如果已经有此表将其删除,第一次创建,不用这句!

GO

Create Table Feedback --创建表FeedBack

(

Feedback_ID  int  Primary Key Identity (1, 1) Not Null,

--字段Feedback_ID ,主关键字,自动累加,初值为1,自动加1,不能为空--逗号可不加

Title nvarchar(256) Not Null, --字段Title 留言标题,类型nvarchar 大小256,不能为空

Content text Not Null, --字段Content  --留言内容,类型文本字段,不能为空

subFeedback_count  int default 0 --字段subFeedback_count 回复的条数!默认值0

)

2、插入一条新记录,并显示出来

Insert into Feedback

(Title,Content)

values

('here is Title','This is a test')

GO

select * from Feedback

3、创建第二表:subFeedback存放留言的回复

Create Table subFeedback

(

subFeedback_ID int Primary Key identity(1,1) Not Null,

Feedback_ID int Foreign key references Feedback(Feedback_ID),

--定义外键关联到表Feedback的主键Feedback_ID

Content text Not Null

)

 三、创建两个触发器

1、第一个触发器(级联删除触发器):

当删除Feedback表中的记录时,自动删除subFeedback中外键对应相同的所有记录 Create Trigger Trigger_delete_Feedback

ON Feedback

--在表feedback上建触发器Trigger_delete_Feedback

Instead OF  Delete

--INSTEAD OF 触发器表示并不执行其所定义的

操作(INSERT、 UPDATE、 DELETE),而仅是执行触发器本身

--或者说发生Delete事件时执行,该触发器AS后语名会替换过delete语句的执行

AS

Delete From subFeedback where Feedback_ID in(select Feedback_ID from deleted)

--删除表subFeedback外键与删除feedback主键相同的值

Delete From Feedback where Feedback_ID in(select Feedback_ID from deleted)

2、第二个触发器:

当subFeedback有新增记录时,Feedback.subFeedback_count字段记数增加! Create Trigger Trigger_update_subFeedback

ON subFeedback

For insert

--注间和Instead OF的区别,For是当insert语句执行完后再执行解发器AS后的语句

AS

update Feedback set subFeedback_count=subFeedback_count+1 where Feedback_ID in(select Feedback_ID from inserted)

另外:如果考虑的较周全点,当subFeedback中的记录删除时,Feedback_subFeedback_count字段还要减1,触发器的写法和上面一相似,为减短教程,就不在增加!

四、建立两个存储过程用来保存增加的Feedback和subFeedback记录 

Create Procedure proc_insert_Feedback --创建存储过程proc_insert_Feedback

@Title nvarChar(256),@Content text  --定义参数变量

AS

Insert into Feedback (Title,Content) values(@Title,@Content) --执行语句

GO

Create Procedure proc_insert_subFeedback

@Feedback_ID int,@Content text

AS

Insert into subFeedback (Feedback_ID,Content) values(@Feedback_ID,@Content)

五、建立asp文件,完成留言板制作!

1、创建conn.asp文件,与数据库连接。

<%

dim conn

set conn=Server.createobject("ADODB.CONNECTION")      '创建连接对象

conn.open="Provider=SQLOLEDB; Data Source=127.0.0.1;" & _

"Initial Catalog=Feedback; User ID=sa; password=sa;"

'打开连接。换成你的server-IP(如果也是本机不用修改),数据库用户名,密码!

%>

2、创建List.asp显示留言,内容。

这里我把增加的 Form 也加到了文件底部,减少文件的个数。 <!--#include file="conn.asp"--><!--用include file包含数据库连接文件。-->

<%

SQL="select * from Feedback"

Set rs=Server.CreateObject("ADODB.Recordset")      '创建数据集rs

rs.open SQL,conn,1,3   '打开

if not rs.eof then

output=""   '定义字符串变量output,输出

do while not rs.eof           '外循环开始

output=output&rs("title")

output=output&"--<a href=Feedback.asp?feedback_ID="&rs("feedback_ID")&"&title="&rs("title")&">回复该留言</a>["&cstr(rs("subFeedback_count"))&"]<hr>"

'建立回复留言的链接,并把要回复的留言的记录Feedback_ID和Title传给Feedback.asp

'Feedback用来标志是回复了哪条记录,增加数据库用!Title用来显示回复的哪条记录,给回复者看

output=output&rs("content")

output=output&"<br><br>"

sqlsub="select * from subFeedback where Feedback_ID="&rs("Feedback_ID")

Set rsSub=Server.CreateObject("ADODB.Recordset")

rsSub.open sqlSub,conn,1,3

if not rsSub.eof then

j=1   '为for语句定义变理

do while not rsSub.eof

for k=1 to j            '贴子缩进,贴子越靠后,缩进量越大

output=output&"  "

next

output=output&"["&j&"]楼<span style='word-wrap: break-word;'>"

output=output&rsSub("content")

output=output&"</span><br>"

j=j+1

rsSub.movenext

loop

end if

output=output&"<br>"

rs.movenext

loop

response.write output

else

response.write "无记录!"

end if

rs.close

set rs=nothing

%>

<script>

function chkform(){

//这个函数用来判断输入是否为空

//当然这里的判断还远远不够,比仿说还要判断字符的多少,是否有非法字符等

if (document.add.title.value==""|| document.add.content.value==""){

alert("标题或内容不能为空,请输入!");

return;

}

document.add.action="add.asp";

document.add.submit;

}

</script>

<form name="add" method="post" action="javascript:chkfrom();">

标题<input type=text size="50" name=title><br>

内容<textarea name="content" cols="50" rows="8"></textarea><br>  

<input type="hidden" value="Feedback" name="table">

<!--上面是一个隐藏域,传递一个名为table,值为Feedback变量,让add.asp知道是编辑的Feedback表-->

<input type="submit" name=submit value="   提   交   ">

</form>

通过上面的list.asp文件,这时如果数据库有有数据,那么网页中就可以显示数据了,如果没有内容网页显示“无记录”,下边显示增加表单。

3、创建Feedback.asp文件,用来填写留言的回复!

回复:<%=request("title")%>

<form name="add" method="post" action="add.asp">

内容<textarea name="content" cols="50" rows="8"></textarea><br>

<input type="hidden" name="table" value="subFeedback">  

<input type="hidden" name="Feedback_ID" value='<%=request.QueryString("Feedback_ID")%>'>

<input type="submit" name=submit value="   提   交   ">

</form>

4、创建add.asp文件,用来分别保存时Feedback,subFeedback的两个表的增加记录!

这里请注意ASP调用SQL SERVER的存储过程的方法,会让程序变的很简洁! <!--#include file="conn.asp"-->

<%

table=request.form("table")  '用来判断是编辑的哪个表

if table="Feedback" then

title=cstr(trim(request.form("title")))

content=cstr(trim(request.form("content")))

'trim去掉字符串前后的空格,cstr数据类型转为字符型

if title<>"" and content<>"" then

Conn.Execute "proc_insert_Feedback '"&title&"','"&content&"'"

else

response.write "<script>alert('所需数据为空,请填写')</script>"

response.write"<script>history.go(-1)</script>"

response.end

end if

elseif table="subFeedback" then

Feedback_ID=trim(request.form("feedback_ID"))

content=cstr(trim(request.form("content")))

if Feedback_ID<>"" and content<>"" then

Conn.Execute "proc_insert_subFeedback "&Feedback_ID&",'"&content&"'"

else

response.write "<script>alert('所需数据为空,请填写')</script>"

response.write"<script>history.go(-1)</script>"

end if

end if

response.redirect("List.asp")

%>

下载这四个ASP文件。

转载于:baisichen

https://me.csdn.net/baisichen

利用Asp.net和Sql Server实现留言板功能的更多相关文章

  1. 利用反馈字段给帝国cms添加留言板功能(图文教程)

    帝国cms的插件中提供信息反馈字段,很多人却不会用.这里谢寒教大家如何来给自己的帝国cms网站添加留言板功能 1.找到添加地址 2.添加字段 3.你可以在字段中添加多种字段类型(有文本域,单行文本框, ...

  2. ASP.NET 连接 SQL Server 和 Oracle 教程

    临近期末,有很多同学都问我怎么关于ASP.NET 连接 SQL Server 和 Oracle 的问题.由于人太多了,我也不能一一去帮忙,就写了这篇博客.希望对大家有用处. 首先,前期准备是要安装数据 ...

  3. 利用Ring Buffer在SQL Server 2008中进行连接故障排除

    原文:利用Ring Buffer在SQL Server 2008中进行连接故障排除 出自:http://blogs.msdn.com/b/apgcdsd/archive/2011/11/21/ring ...

  4. Python和SQL Server 2017的强大功能

    Python和SQL Server 2017的强大功能 摘要: 源:https://www.red-gate.com/simple-talk/sql/sql-development/power-pyt ...

  5. c#直接调用ssis包实现Sql Server的数据导入功能

    调用ssis包实现Sql Server的数据导入功能网上已经有很多人讨论过,自己参考后也动手实现了一下,上一次笔者的项目中还用了一下这个功能.思前想后,决定还是贴一下增强记忆,高手请54. 1.直接调 ...

  6. Web开发从零单排之二:在自制电子请帖中添加留言板功能,SAE+PHP+MySql

    在上一篇博客中介绍怎样在SAE平台搭建一个html5的电子请帖网站,收到很多反馈,也有很多人送上婚礼的祝福,十分感谢! web开发从零学起,记录自己学习过程,各种前端大神们可以绕道不要围观啦 大婚将至 ...

  7. php实现留言板功能

    这个小小的留言板功能适合班级内或者公司内部之间的讨论,对话和留言,非常的方便,更重要的是无需网络,对于公司管理层来说是非常乐于常见的, 下面是这个留言板的写法: 1 首先是登录页面: <form ...

  8. 使用PHP连接数据库实现留言板功能

    PHP实现留言板功能: 1 首先是登录页面: <!DOCTYPE html><html>    <head>        <meta charset=&qu ...

  9. jsp中运用application实现共享留言板功能

    jsp中application的知识点总结: 1.一个Web应用程序启动后,将会自动创建一个application对象,在整个应用程序的运行过程中只有这一个application对象,即所有访问该网站 ...

随机推荐

  1. D. Feeding Chicken(构造)

    题目大意:将k个鸡放到一个n*m的矩阵中,要求每个鸡所占的rice的个数只差最小 题解:构造,设一共有cnt个rice,可以分cnt/k个,即每一只鸡要么占用cnt/k个rice,要么占cnt/k+1 ...

  2. 杭电 逃离迷宫 BFS

    给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位 ...

  3. Python冒泡排序算法及其优化

    冒泡排序 所谓冒泡,就是将元素两两之间进行比较,谁大就往后移动,直到将最大的元素排到最后面,接着再循环一趟,从头开始进行两两比较,而上一趟已经排好的那个元素就不用进行比较了.(图中排好序的元素标记为黄 ...

  4. Java SE —— 专栏总集篇

    前言: Java 语言,是相对于其他语言而言,门槛低,而且功能还强大的一门编程语言,本人十分看好这一门语言,但是,它也是有深度的,看过本人的<数据结构与算法>专栏的同学们有福了,因为本人在 ...

  5. bash cookbook

    目录 简介 变量 静态变量 变量操作 数组 应用 四则运算 条件测试 整数测试 文件测试 字符测试 组合条件测试 选择语句 循环语句 for--有限循环 while--无线循环 until conti ...

  6. Java类的使用

    在一个Java文件中写两个类:一个基本的类,一个测试类.注意:文件名称和测试类名称一致. 如何使用呢?创建对象使用.如何创建对象呢?格式:类名 对象名 = new 类名(); Student s = ...

  7. Unity 芯片拼图算法

    很多游戏的养成系统中会有利用芯片或者碎片来合成特定道具的功能,或者来给玩家以额外的属性提升等,先截个图以便更好说明: 如上图,我们有各种各样形状迥异的碎片,上面只不过列举了其中一部分,现在,我们需要利 ...

  8. beego rel/reverse

    用户可以发布多个文章 对用户来说是一对多 对文章来说是多对一 用户是主表 文章是用户的从表 rel用在从表中,给主表结构体设置主键,也就是文章表对应用户表的外键 reverse用在主表中,指定主表与从 ...

  9. thinkphp 5 一些常见问题

    ##  请求缓存 request_cache        

  10. 前端JS—显示赋值(一)

    一:js代码必须位于<script>js代码</script> 把js代码放到<body>元素的地步,可以改善显示速度 二:js显示数据 使用 window.ale ...