Posts Tagged ‘BeiTown’

ASP.NET使用GridView对数据库快速操作

星期四, 九月 19th, 2013 5 views

①绑定及显示数据

首先在界面中创建一个SqlDataSource和一个GridView控件,配置SqlDataSource绑定到指定数据库的某一个表(例如某test表)。接下来将这个数据源绑定到GridView中(自动生成需要的行列),效果如图

此时编译运行程序即可看到test表中的内容,这段界面的代码如下(自动生成)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="id" DataSourceID="SqlDataSource1" style="margin-right: 34px">

            <Columns>
                <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False"
                   ReadOnly="True" SortExpression="id" />
                <asp:BoundField DataField="userName" HeaderText="userName"
                   SortExpression="userName" />
                <asp:BoundField DataField="passWord" HeaderText="passWord"
                   SortExpression="passWord" />
                <asp:BoundField DataField="Role" HeaderText="Role" SortExpression="Role" />
            </Columns>
        </asp:GridView>

        <asp:SqlDataSource ID="SqlDataSource1" runat="server"
           ConnectionString="<%$ ConnectionStrings:mytestConnectionString %>"
            SelectCommand="SELECT * FROM [test] ORDER BY [id]">
        </asp:SqlDataSource>

②对数据进行编辑
如图点击GridView右侧的按钮添加一个列,在这个列中加入编辑按钮

此时会生成如下一段代码

1
 <asp:CommandField ShowEditButton="True" />

编译运行程序效果如图

点击界面上的[编辑]出现如图

即可对数据库test表的目标行进行修改,点击[修改]即可执行UPDATA命令。

以上即快速实现了一个对数据库表进行修改的Demo。

总结:
此方案的优点是开发异常迅速,基本不用编写代码即可完成对数据库表的显示、查询、以及修改。
但弊端也是由于代码编写量少,无法加入更多的逻辑内容。

BeiTown
2013.09.19

ASP.NET 数据库(SQL SERVER)操作的最简Demo

星期一, 九月 2nd, 2013 15 views

首先创建一个数据库操作基类DB.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
using System.Security.Cryptography;
/// <summary>
///DB 的摘要说明
/// </summary>
public class DB
{
    public static string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
    public DB(){}

    /// <summary>
    ///创建连接
    /// </summary>
    public SqlConnection GetConnection()
    {
        return new SqlConnection(connectionString);
    }

    /// <summary>
    ///执行语句并返回行数
    /// </summary>

 <a href="http://coder.beitown.com/archives/1014#more-1014" class="more-link">(更多...)</a>

SQLSERVER 快速清空数据表方法

星期五, 八月 2nd, 2013 4 views

在日常运维中我们常常会需要清空一些数据库的表数据,常规方法是使用DELETE语句

1
DELETE FROM [表名]

此方法的优点是可以根据条件删除数据(在表名后加where),但当需要全部清空一个表时使用此方法则会显得非常缓慢,因为DELETE是逐条删除的。
所以通常清空表时可以使用TRUNCATE TABLE来清空数据表

1
TRUNCATE TABLE [表名]

此方法无论数据库表有多少行数据都是秒删,其本质就是重建一个空表的意思。

当然有时候需要条件删除也可以使用此方法,即首先备份需要保留的数据到另一个临时表中,将本表清除后再将临时表的数据插入到本表中,方法如下

1
2
3
4
5
6
7
8
9
IF object_id('tempdb..#[临时表]') IS NOT NULL --确认是否已存在
BEGIN  
      DROP TABLE #temp_table --删除待用临时表
END

SELECT * INTO #临时表 FROM [本表] WHERE 条件 --创建临时表并拷贝数据
TRUNCATE TABLE [本表] --重建表
INSERT [本表] SELECT * FROM #临时表 --将临时表插入本表
DROP TABLE #临时表 --删除临时表

更多SQL操作技巧欢迎交流讨论,谢谢关注。

BeiTown
2013.08.02

SQLSERVER查询表行数和列数

星期四, 八月 1st, 2013 5 views

①返回表行(记录)数

1
SELECT COUNT(*) AS 行数 FROM 表名

②返回表列(字段数)

1
SELECT COUNT(*) AS 列数 FROM syscolumns WHERE (id = OBJECT_ID( '表名'))

BeiTown
2013.08.01

SQL使用游标对Select结果集循环操作

星期二, 七月 30th, 2013 21 views

首先先简述一下SQL中游标的作用,我们可以将游标理解成一个数组或是一个队列,其保存了Select的结果集的地址队列。
当我们需要对Select的结果集进行循环操作时,可以先定义一个游标,并将结果集指向到这个游标当中,使用游标像指针一样访问这个结果集,如下

①声明游标

1
2
3
DECLARE @id INT --声明一个变量id
DECLARE cur CURSOR read_only FOR --声明一个名为cur的游标
SELECT Userid FROM UserTable WHERE ...... --某Select语句

上述代码意为声明一个游标指向某Select语句的结果集,read_only的意思是这个指针只用于读取,如果更新则需要使用update,这样做的好处是可以明确游标的针对性从而提高执行效率。
DECLARE @id int 意为声明一个变量id,后续会用于从游标指向的结果集中获取数据

创建完游标之后,现在需要打开这个游标并进行操作,语法如下:

②打开游标并读取游标数据

1
2
3
4
5
6
7
8
OPEN cur
Fetch NEXT FROM cur INTO @id --将cur中的下一个数据赋值给变量id

WHILE(@@FETCH_STATUS = 0)
BEGIN
    --要执行的SQL语句
    fetch NEXT FROM cur INTO @id
END

Fetch 的语法如下
Fetch [Next | Prior | First | Last | Absolute n | Relative n ] From 游标名 INTO @变量1,@变量2…

Next:返回结果集中当前行的下一行记录
Prior:返回结果集中当前行的前一行记录,如果第一次读取则没有行返回,并且把游标置于第一行之前。
First:返回结果集中的第一行记录,并且将其作为当前行。
Last:返回结果集中的最后一行,并且将其作为当前行。
Absolute n:当 n > 0 时返回从游标头开始的第n行,并且将其作为当前行;n < 0 时返回从游标末尾开始的第n行,并且将其作为当前行;n = 0 时返回当前行。
Relative n:当 n > 0 时返回从当前行之后的第n行;n < 0 时则返回当前行之前的第n行;n = 0 时返回当前行。

开启游标后,游标指针位于-1行,因此需要使用FETCH NEXT移动到Select的结果集的第一行,
WHILE(@@FETCH_STATUS = 0)循环判断是否有数据,满足条件时将执行Begin和End之间的语句。
每次执行完之后注意使用 Fetch NEXT 移动到下一行。
(更多…)

批处理统计指定服务器端口TCP连接数及拓展工具编写

星期一, 七月 29th, 2013 14 views

最近要对服务器指定端口进行连接数统计,服务器的一些防火墙自带了此功能,但是有时防火墙对流量影响较大,需要关闭防火墙,因此尝试使用批处理创建一个简单查看工具
首先看核心语句

1
2
@echo off
netstat -an | find ":80 " | find "ESTABLISHED" /c

该语句的意思是在netstat -an 的结果中查找满足”:80″的结果 再在其中查找满足 “ESTABLISHED” 的结果 并/c 统计行数
@echo off 的意思是关闭输入命令的回显
接下来我们可以设置其1秒钟执行一次

1
2
3
4
5
6
:loop

//这里加入待循环的语句
timeout /t 1

go loop

此时即基本满足了对指定端口连接数的实时统计。

接下来将进一步利用批处理建立一个迷你的查看工具,首先是定义一下窗口的大小、字体和背景颜色以及标题:

1
mode cols=40 lines=10 & color 2f & title 标题

上述语句意为设置 列数40 行数10 颜色4f(后续有值说明) 以及标题

关于Color的说明如下:

COLOR [attr]

attr 指定控制台输出的颜色属性

颜色属性由两个十六进制数字指定 — 第一个为背景,第二个则为
前景。每个数字可以为以下任何值之一:

0 = 黑色   8 = 灰色
1 = 蓝色   9 = 淡蓝色
2 = 绿色   A = 淡绿色
3 = 浅绿色   B = 淡浅绿色
4 = 红色   C = 淡红色
5 = 紫色   D = 淡紫色
6 = 黄色   E = 淡黄色
7 = 白色   F = 亮白色

结合一下整体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
@echo off
mode con cols=40 lines=10 & color 2f & title BeiTown端口连接数查看器
:loop
    cls
    @echo 当前80端口连接数:
    echo.
    echo.
    netstat -an | find ":80 " | find "ESTABLISHED" /c
    echo.
    echo.
    timeout /t 1
goto loop

将此代码保存为bat格式文件,直接执行即可。
效果如图:

在下一节中我们将简述如何将批处理的回显存入变量中用于进一步编程。

本篇先到此,谢谢关注。

BeiTown
2013.07.29

C++ struct虚拟类(接口)使用范例

星期二, 六月 18th, 2013 10 views

首先是接口的编写
InterfaceTest.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma once
/************************************************************************/
/* 接口定义                                                             */
/************************************************************************/
struct ITestInterface
{
    virtual ~ITestInterface(){}
    virtual void Release() = 0;//释放接口
    virtual void TestFun() = 0;//接口函数示例

};
extern"C"
{
    ITestInterface* CreateInterface();//创建接口
};

接下来新建一个类实现这个接口:
CTest.h

1
2
3
4
5
6
7
8
9
10
11
#pragma once
#include "InterfaceTest.h"
/************************************************************************/
/* 接口实现                                                             */
/************************************************************************/
class CTest : public ITestInterface
{
public:
    virtual void Release();
    virtual void TestFun();
};

CTest.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "CTest.h"

ITestInterface* CreateInterface()
{
    return new CTest;
}
void CTest::Release()
{
    delete this;
}

void CTest::TestFun()
{
    //这里实现接口功能
}

接下来是该接口类的使用方法

Main.cpp

1
2
3
4
5
6
7
8
#include "InterfaceTest.h"

void main()
{
    ITestInterface* test= CreateInterface();//创建接口
    test->TestFun();//执行接口函数
    test->Release();//释放接口
}

代码即讲解,最后感谢一下FG提供的方案。
本文到此,谢谢关注。

BeiTown
2013.06.18

C++在windows下创建线程范例

星期一, 六月 17th, 2013 16 views

虽然简单,但依旧记录一下,接触和使用的语言太多,长时间不用这门语言就容易遗忘,仅当日记吧。

在windows下,常常使用SDK win32 api来编写多线程的程序,实现方法如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <windows.h>

//Fun为自定义的线程函数
DWORD  WINAPI  Fun( LPVOID  lpParamter )
{
    while(1) {

        printf("新线程正在执行...");

    }
}

int main()
{
    HANDLE  hThread = CreateThread(NULL, 0, Fun, NULL, 0, NULL);//创建线程
    return 0;
}

以上为最简实现方法。

其他拓展后续添加。

本文到此,谢谢关注。

 

BeiTown

2013.06.17

IIS 401.1、401.2错误的解决方法

星期二, 六月 11th, 2013 10 views

401.1错误

如图,在IIS中创建一个新的网站后出现如下情况,出现401.1错误即用户访问权限错误

解决方法如下:
①确认 我的电脑–管理–本地用户和组 中IUSR_机器名帐号已经启用并且未被锁定
②确认 网站–属性–目录安全性–身份验证和访问控制中启用了匿名访问并且帐号密码正确

配置如上图。

完成以上操作后即可解决。
(更多…)

常用JS表单验证汇总(持续更新)

星期五, 六月 7th, 2013 4 views

首先是测试html页面的编写

1
2
3
4
5
6
7
8
<form name="form1" action="#" method="post" onsubmit="return check()">

帐号:<input name="ID" type="text" />
密码:<input name="PWD" type="password" />
<input name="submit" type="submit" value="提交" />  
<input name="reset" type="reset" value="取消" />

</form>

以下为相应功能的js脚本
①验证为非空

1
2
3
4
5
6
7
8
9
10
function check()
{
    if(document.form1.ID.value=="" || document.form1.PWD.value=="" )
    {
        alert("用户名或密码不能为空!");
        this.form1.ID.focus();
        return false;
    }
else form1.submit();
}

②密码位数验证

1
2
3
4
5
6
7
//添加进check()中即可
if(document.form1.zhanghao.value.length<6)
{
    alert("用户名字符不能少于6位!");
    this.form1.zhanghao.focus();
    return false;
}

BeiTown
2013.06.07