Posts Tagged ‘数据库’

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

星期一, 九月 2nd, 2013 148 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查询表行数和列数

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

①返回表行(记录)数

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

②返回表列(字段数)

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

BeiTown
2013.08.01

关于数据库Timeout expired…server is not responding的解决方案

星期三, 七月 3rd, 2013 125 views

当访问一个页面是出现

Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. 

此时表示数据库访问超时,可能此时在执行一个很费时的SQL 操作,而无法在相应时间内给予回复。
关于引起Timeout,比较常见的有可能是因为SqlConnection.ConnectionTimeout引起,或者Connection打开后没有关闭。

在这里还有另一个很有可能,就是你没有设置你的SqlCommand.CommandTimeout。

SqlCommand.CommandTimeout:
获取或设置在终止执行命令的尝试并生成错误之前的等待时间。
等待命令执行的时间(以秒为单位)。默认为 30 秒。

如果设置值 0 ,表示无限制,在CommandTimeout中应避免值 0,否则会无限期地等待执行命令。

另外出现此时错误的原因也有可能是数据库地址错误照成无法连接,此时应当检查数据库连接的配置文件。

同时,对执行SQL语句超时的处理,我们应当尽可能的对数据库的存取过程进行优化,并在读取页面做相应的分页处理等,以避免数据库操作相应时间的超时错误。

关于数据库的优化,之前的博文里已有基本优化方案,更多的方案后续会另外开篇。

本篇到此,谢谢关注。

BeiTown
2013.07.03

数据库清除冗余数据的常用SQL脚本(初级)

星期三, 六月 5th, 2013 26 views

最近项目的数据库要清理一些冗余数据,冗余数据主要来自于一些死账号即长期不登录的玩家或帐户余额长期为0的玩家,基本方法就是使用SQL脚本进行批量删除。同时冗余数据大多不会只存在一个表中,因此还需要跨表进行操作。

①单个表日期筛选删除
首先是日期筛选,比如需要过滤出最后登录日期在多少年月日以前的帐号。
这里对日期筛选的脚本如下:
如删除最后登录日期在2013年1月1日0点0分之前的帐号:

1
DELETE FROM [玩家表] WHERE 最后登录日期字段名 <  '2013-1-1 00:00:00'

如果查找之后的使用大于号”>”即可

②表连接进行跨表删除
比如此时需要删除最后登录日期在2013年1月1日并且其账户余额为0的玩家帐号:

1
2
DELETE FROM [玩家表] WHERE  最后登录日期字段名 < '2013-1-1 00:00:00' AND 用户ID字段 IN
(SELECT 用户ID字段 FROM [账户表] WHERE 余额字段 = 0)

此方法为一个嵌套查询,即先在玩家表中寻找余额为0的行,再在这些行中筛选出登录日期小于13年1月1日的行并删除。通常嵌套查询会比较慢但利于理解。

③清除其他表中的无效数据
当执行了第二步操作后,玩家表中满足条件的行都将被删除,但此时账户表中该玩家的信息尚未删除,此时只需要做一个对比即可,即删除存在一个表(玩家表)而不在另一个表(账户表)中的数据。
依旧用嵌套查询的方法吧

1
2
DELETE FROM [账户表] WHERE 用户ID字段 NOT IN
(SELECT 用户ID字段 FROM [玩家表])

以上脚本即可简单的删除一些定向抛弃的数据库的冗余信息,当然由于方法相对初级因此执行效率有待提高,但对于手动脚本操作来说基本影响不大。

总结:
通过对以上三段代码的举一反三,即可完成大多数数据库的冗余数据清除。
欢迎大家提出更优秀高效的方案,后期我也会陆续更新一些更高级的冗余数据清理方案,本篇到此,谢谢关注。

BeiTown
2013.06.05

C++使用ADO方式操作SQLSERVER数据库

星期二, 六月 4th, 2013 382 views

C++连接数据库的方式常用的有 DB-Lib、ODBC、OLEDB和ADO。本篇中将使用的是ADO方式。
ADO是一个微软提供的访问数据库中数据的编程接口,关于ADO网上的描述很多,本篇直接说明如何使用,其他相关的介绍大家可以自行参考官方文档
首先需要导入一个ADO的dll库,并添加一个数据库连接指针和查询结果集指针,在头文件ADOConn.h中添加如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#import "c:\Program Files\Common Files\System\ado\msado15.dll"
no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")

class ADOConn  
{
public:
    //添加一个指向Connection对象的指针
        _ConnectionPtr m_pConnection;
    //添加一个指向Recordset对象的指针
    _RecordsetPtr m_pRecordset;

public:
    ADOConn();
    virtual ~ADOConn();

    //初始化--连接数据库
    void OnInitADOConn();
    //执行查询
    _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
    //执行SQL语句
    BOOL ExecuteSQL(_bstr_t bstrSQL);
    //断开数据库连接
    void ExitConnect();
};

如上一个数据库的操作分别需要实现以上4个函数,即初始化连接、查询、执行以及断开连接。
(更多…)