SQL Server数据类型


数据类型
类型
描             述
bit
整型
bit 数据类型是整型,其值只能是0、1或空值。这种数据类型用于存储只有两种可能值的数据,如Yes 或No、True 或Fa lse 、On 或Off
int
整型
int 数据类型可以存储从- 231(-2147483648)到231 (2147483 647)之间的整数。存储到数据库的几乎所有数值型的数据都可以用这种数据类型。这种数据类型在数据库里占用4个字节
smallint
整型
smallint 数据类型可以存储从- 215(-32768)到215(32767)之间的整数。这种数据类型对存储一些常限定在特定范围内的数值型数据非常有用。这种数据类型在数据库里占用2 字节空间
tinyint
整型
tinyint 数据类型能存储从0到255 之间的整数。它在你只打算存储有限数目的数值时很有用。 这种数据类型在数据库中占用1 个字节
numeric
精确数值型
numeric数据类型与decimal 型相同
decimal
精确数值型
decimal 数据类型能用来存储从-1038-1到1038-1的固定精度和范围的数值型数据。使用这种数据类型时,必须指定范围和精度。 范围是小数点左右所能存储的数字的总位数。精度是小数点右边存储的数字的位数
money
货币型
money 数据类型用来表示钱和货币值。这种数据类型能存储从-9220亿到9220 亿之间的数据,精确到货币单位的万分之一
smallmoney
货币型
smallmoney 数据类型用来表示钱和货币值。这种数据类型能存储从-214748.3648 到214748.3647 之间的数据,精确到货币单位的万分之一
float
近似数值型
float 数据类型是一种近似数值类型,供浮点数使用。说浮点数是近似的,是因为在其范围内不是所有的数都能精确表示。浮点数可以是从-1.79E+308到1.79E+308 之间的任意数
real
近似数值型
real 数据类型像浮点数一样,是近似数值类型。它可以表示数值在-3.40E+38到3.40E+38之间的浮点数
datetime
日期时间型
datetime数据类型用来表示日期和时间。这种数据类型存储从1753年1月1日到9999年12月3 1日间所有的日期和时间数据, 精确到三百分之一秒或3.33毫秒
Smalldatetime
日期时间型
smalldatetime 数据类型用来表示从1900年1月1日到2079年6月6日间的日期和时间,精确到一分钟
cursor
特殊数据型
cursor 数据类型是一种特殊的数据类型,它包含一个对游标的引用。这种数据类型用在存储过程中,而且创建表时不能用
timestamp
特殊数据型
timestamp 数据类型是一种特殊的数据类型,用来创建一个数据库范围内的唯一数码。 一个表中只能有一个timestamp列。每次插入或修改一行时,timestamp列的值都会改变。尽管它的名字中有“time”, 但timestamp列不是人们可识别的日期。在一个数据库里,timestamp值是唯一的
Uniqueidentifier
特殊数据型
Uniqueidentifier数据类型用来存储一个全局唯一标识符,即GUID。GUID确实是全局唯一的。这个数几乎没有机会在另一个系统中被重建。可以使用NEWID 函数或转换一个字符串为唯一标识符来初始化具有唯一标识符的列
char
字符型
char数据类型用来存储指定长度的定长非统一编码型的数据。当定义一列为此类型时,你必须指定列长。当你总能知道要存储的数据的长度时,此数据类型很有用。例如,当你按邮政编码加4个字符格式来存储数据时,你知道总要用到10个字符。此数据类型的列宽最大为8000 个字符
varchar
字符型
varchar数据类型,同char类型一样,用来存储非统一编码型字符数据。与char 型不一样,此数据类型为变长。当定义一列为该数据类型时,你要指定该列的最大长度。 它与char数据类型最大的区别是,存储的长度不是列长,而是数据的长度
text
字符型
text 数据类型用来存储大量的非统一编码型字符数据。这种数据类型最多可以有231-1或20亿个字符
nchar
统一编码字符型
nchar 数据类型用来存储定长统一编码字符型数据。统一编码用双字节结构来存储每个字符,而不是用单字节(普通文本中的情况)。它允许大量的扩展字符。此数据类型能存储4000种字符,使用的字节空间上增加了一倍
nvarchar
统一编码字符型
nvarchar 数据类型用作变长的统一编码字符型数据。此数据类型能存储4000种字符,使用的字节空间增加了一倍
ntext
统一编码字符型
ntext 数据类型用来存储大量的统一编码字符型数据。这种数据类型能存储230-1或将近10亿个字符,且使用的字节空间增加了一倍
binary
二进制数据类型
binary数据类型用来存储可达8000 字节长的定长的二进制数据。当输入表的内容接近相同的长度时,你应该使用这种数据类型
varbinary
二进制数据类型
varbinary 数据类型用来存储可达8000 字节长的变长的二进制数据。当输入表的内容大小可变时,你应该使用这种数据类型
image
二进制数据类型
image 数据类型用来存储变长的二进制数据,最大可达231-1或大约20亿字节
参考

2012/06/14--更新

SQL数据类型----字符型数据分析

字符型数据类型可用来存储数字符号、字母以及特殊符号。一般,使用字符型数据时,要给数据加上单引号或双引号。

1.char---char数据类型使用固定长度来存储字符,最长可以容纳8000char数据类型的定义形式为:char[n]

其中,n表示所有字符占有的存储空间,以字节为单位。n必须是一个介于1~8000之间的数值。若不指定n值,则系统默认为1。
利用char数据类型来定义表列或者定义变量时,应该给定数据的最大长度。如果实际数据的字符长度短于给定的最大长度,则多余的字节会被以空格填充。如果实际数据的字符长度超过了给定的最大长度,则超过的字符将会被截断。在使用字符型常量为字符数据类型赋值时,必须使用双引号或单引号将字符型常量括起来。例如:'loving','舞'。
注意:使用char数据类型的最大好处就在于可以精确计算数据占有的空间。计算机占用的空间非常重要。在一些非常庞大的系统里定义一些表列长度时,几个字节的差距也许意味着上百兆数据空间的节省或浪费。

2.nchar---nchar用来定义固定长度的Unicode数据,最大长度为4000个字符。与char类型相似,nchar数据类型的定义形式为:nchar[n]

其中,n表示所有字符占有的存储空间,以字节为单位。n必须是一个介于1~4000之间的数值。
因为nchar类型采用UNICODE标准的数据类型,所以它比char多占用一倍的存储空间。使用UNICODE标准的好处是因其使用两个字节作为存储单位,故其一个存储单位的容纳量就大大增加了,可以将全世界的语言文字都包括在内,在一个数据列中就可以同时出现中文、英文、法文、德文等,而不会出现编码冲突。

3.varchar SQL利用varchar数据类型来存储最长可以达到8000个字符的变长字符数据。

与char数据类型不同,varchar数据类型的存储空间,随存储在表列中每一个数据的字符数的不同而变化。
例如,如果定义表列为varchar20),那么存储在该列的数据最多可以长达20个字节。但是,在每列数据没有达到20个字节时,并不会在多余的字节上填充空格
varchar数据类型的定义形式为:varchar[n]
其中,n表示所有字符占有的存储空间,以字节为单位。n必须是一个介于1~8000之间的数值。若输入的数据过长,SQL将会截掉其超出部分。
说明:当存储在列中数据的值的大小经常变化时,使用varchar数据类型可以有效地节省空间。

4.nvarchar

用来定义可变长度的二进制数据,最大长度为4000nvarchar数据类型的定义形式为:
nvarchar[n]
其中,n表示所有字符占有的存储空间,以字节为单位。n必须是一个介于1~4000之间的数据。nvarchar与nchar的区别和varchar与char的区别类似。
via

MFC数据库编程

数据库开发技术简介

DAO
ODBC
OLE DB
ADO

数据库开发实例

实例说明和程序框架编程
利用DAO开发本地Access数据库
利用ADO开发本地Access数据库
利用ODBC开发远程服务器端的SQL/MySql数据库

为了能用同样的方法访问不同的数据库,许多大公司提出“通用数据库接口标准”,如微软的ODBC、DAO、RDO、OLEDB、ADO、Borland公司的BDE等等。
这些接口封装了各类数据库驱动,应用程序通过标准接口编程,程序就会根据数据类型调用不同驱动。
微软早期提出的数据库接口为DAO,并且封装到MFC中。目前流行的数据库接口:ODBC、ADO
数据库简介------DAO

数据库开发技术简介——DAO

DAO(Database Access Object,数据访问对象)使用Microsoft Jet引擎来访问数据库,允许开发者直接连接到 Access 表。
DAO 适用于单系统应用程序开发Access数据库。
MFC 的DAO类封装了DAO的大部分功能,适合数据库编程初学者。

数据库开发技术简介——ODBC

ODBC(Open Data Base Connectivity 开放式数据互联),提供访问多种基于SQL 的数据库的接口。
能够以统一的方式去处理所有数据库:将具体的数据库抽象为“数据源”,数据源与ODBC接口之间,通过数据库的ODBC驱动程序连接。
如:在安装SQL Driver for ODBC和SQLite Driver for ODBC后,程序可以通过同样的代码去访问两者。
ODBC连接数据库的示意图

数据库开发技术简介——OLE DB

概念:OLE DB——是微软的战略性的数据源低级程序接口,是一组读写数据的方法。
将传统的数据库系统划分为多个逻辑组件:
Data Providers 数据提供者:即各类数据库
Data Consumers 数据使用者 :即使用数据库的应用程序
Service Components 服务组件 :提供数据库操作

OLE DB 和ODBC 标准都提供统一的数据库接口,但ODBC 标准基于SQL 数据源,而OLE DB 支持任何数据存储。
因此可以说,ODBC标准 是OLE DB 标准子集。

数据库开发技术简介——ADO

ADO,(ActiveX Data Objects),是一种特殊的OLE DB接口,以OLEDB为基础而封装的,它提供了编程语言和OLE DB的一个中间层。

ADO 是对当前微软所支持的数据库进行操作的最有效和最简单直接的方法,也是微软大力推荐使用的一种接口。

实例说明和程序框架

建立一个学生信息管理系统,
具有添加、删除、修改、查找功能
查找具有多种方式

框架:采用SDI结构,主视图为FormView,数据库采用Access2000格式(*.mdb)(源代码下载)
分别用DAO和ADO两种接口实现编程,数据库结构参考W13_StudentInfo.mdb


利用DAO开发Access数据库
MFC封装的DAO类
MFC通过封装了一套DAO类来实现DAO的功能,在afxdao.h头文件中,包括:
CDaoWorkspace类
CDaoDatabase类
CDaoRecordset类
前三个类是重点
使用DAO,首先要在stdafx.h中添加引用afxdao.h头文件

CDaoTableDef类
CDaoQueryDef类
CDaoException类

(1) CDaoWorkspace类——DAO工作区类

工作区是数据库处理事务管理器,它管理在同一个“事务”区里的一系列打开的数据库。
CDaoWorkspace类在MFC DAO体系结构中处于最顶层,负责管理从登录到断开连接过程中的所有数据库会话的全过程。
CDaoWorkspace类从CObject类里派生而来。

(2) CDaoDatabase类——数据库对象

代表一个数据库连接,通过它程序可操作数据库中的数据。
每个CDaoDatabase对象都拥有自己的表定义、查询定义、记录集和关系对象的集合,并提供操作方法。
重要的两个操作函数:Open和Create,分别打开一个数据库,和创建一个数据库。
CDaoWorkspace和CDaoDatabase的关系:在定义CDaoDatabase对象时,如果在构造函数中没有指定工作区指针,程序会自动创建一个“默认工作区”。

(3)CDaoRecordset类——数据记录集对象

对DAO记录集对象的封装,它代表从数据源中选择的一组记录。
CDaoRecordset可分成3种类型:
表记录集(dbOpenTable):代表一个数据库中的表,通过它可以从单个数据库的表中检索、添加、删除和修改记录。
动态记录集(dbOpenDynaset):是对数据库执行查询操作的结果,它可能包含一个或者多个数据库的所有或者某些特定的字段。
快照记录集(dbOpenSnapshot):是一组记录的静态拷贝通过快照记录集可以查找数据或者生成报表,但是不能对其中的记录进行操作。

CDaoTableDef类——表定义类,用来对数据库中的表进行操作。需掌握打开一个表的方法
CDaoQueryDef类——记录查询定义对象
CDaoException类——处理异常的类
CDaoFieldInfo类——获取表的结构信息

DAO编程准备工作

Step1:为所有相关控件添加变量、按钮响应函数,初始化控件,包括性别、班级、List显示。(略)
Step2:预备工作
在stdafx.h中,包含afxdao.h头文件;
在View类中添加CDaoDatabase和CDaoRecordset 对象指针。添加数据库文件名和当前表名称变量。
在MainFrm.cpp里的OnCreate函数中,添加如下语句:
AfxGetModuleState()->m_dwVersion = 0x0601;
// 更新mfc为6.01版本
Step3:在view类中重载菜单“打开”按钮,调用“打开文件”通用对话框,选择数据库文件
Step4.1:打开数据库文件
 
//step4.1打开数据库,创建记录集合对象
 m_pDatabase = new CDaoDatabase;
 try{
  m_pDatabase->Open(m_DBFileName);
  m_pRecordset = new CDaoRecordset(m_pDatabase);
  m_List.EnableWindow(true);
 }
 catch (CDaoException* e){
  e->ReportError();
  delete m_pDatabase;
  m_pDatabase = NULL;
  e->Delete();
  return;
 }
Step4.2:读取Student_Info表结构显示在CListCtrl控件中。
 //step4.2 读取数据库中的“Student_Info”表的结构
    //写入FormView中的CListCtrl控件中。
 m_strTableName = _T("Student_Info"); // 设置当前操作的数据库表名称
 int nFields;
 CDaoFieldInfo fieldInfo;   // 取表的结构信息
 CDaoTableDef td(m_pDatabase);  // 表对象
 try{
  td.Open(m_strTableName);  //打开指定名称的表
  nFields = td.GetFieldCount(); //获取该表的栏数
  for (int j=0; j < nFields; j++){
   td.GetFieldInfo(j,fieldInfo); //获取每个栏的信息
   int nWidth = m_List.GetStringWidth(fieldInfo.m_strName) + 15;
   m_List.InsertColumn(j,fieldInfo.m_strName,LVCFMT_LEFT, nWidth);
  }
 }catch (CDaoException* e){
  e->ReportError(); 
  e->Delete();
  return false;
 }
 td.Close();
Step4.3:读取数据并显示
 //step 4.3 读取表的数据,写入FormView中的CListCtrl控件中。
 int nItem = 0;
 try{
  //拼一个SQL查询语句:select * from [Student_Info]
  CString strSelect(_T("Select * From ["));
  strSelect += m_strTableName;
  strSelect += _T("]");   
  //指定m_pRecordset类型为动态类型,同时查询
  m_pRecordset->Open(dbOpenDynaset,strSelect);
  
  while (!m_pRecordset->IsEOF()) {
   COleVariant var;
   var = m_pRecordset->GetFieldValue(0); //第0列
   m_List.InsertItem(nItem,strVARIANT(var));
   for (int i=0; i < nFields; i++){
    var = m_pRecordset->GetFieldValue(i);
    CString strItem = strVARIANT(var);
    int width1 = m_List.GetColumnWidth(i);
    int width2 = m_List.GetStringWidth(strItem)+15;
    if (width2 > width1){
     m_List.SetColumnWidth(i,width2);
    }
    m_List.SetItemText( nItem,i,strItem);
   }
   nItem++;
   m_pRecordset->MoveNext();
  }
 }
 catch (CDaoException* e)
 {
  e->ReportError(); 
  e->Delete();
  return false;
 }
由于显示数据库内容在程序其他地方也要用,因此单独做成函数OnUpdateView,详见代码.
操作数据库的一般方法:用CString拼一个SQL语句,然后调用程序去执行该语句,解析返回的结果,显示结果。

DAO编程-----添加数据

Step5.1:编写OnAddButton函数,核心就是拼一个SQL语句,如下
void CW13_1View::OnAddButton() 
{
 //检查数据是否完整
 UpdateData(true);
 if (m_strName1.GetLength()<2 || m_strNum1.GetLength()<1)
 { MessageBox("必须填写姓名和学号");
  return;
 }
 CString strGender,strClass;
 m_Combo1.GetWindowText(strGender);
 m_Combo2.GetWindowText(strClass);
 //数据准备完毕,开始写入数据
 m_strTableName = "Sdudent_Info";
 if(!m_pDatabase->IsOpen()) return;          // 测试DAO数据库对象的有效性
 if(!m_pRecordset) return;
 if(m_pRecordset->IsOpen()) m_pRecordset->Close();
 // 拼一个SQL语句
 CString strSql;
 strSql.Format("insert into Student_Info(学号,姓名,性别,班级,EMail) \
      values('%s','%s','%s','%s','%s')",\
    m_strNum1,m_strName1,strGender,strClass,m_strEmail);  
 try{
  if(m_pDatabase->CanUpdate())
   m_pDatabase->Execute(strSql, dbDenyWrite|dbConsistent);
 }
 catch(CDaoException* e){
  e->ReportError();
  e->Delete();
  return;
 }

 //写入完成,更新view
 UpdateView();
}
在添加数据后,调用 UpdateView();完成数据库更新。
这里注意两个bug:
程序并没有实现“学号重复”的判断。
程序每次添加数据都要重新读取数据库里所有内容,当数据量很大时,显然不现实,还需要改进,比如,通过添加翻页机制,将刷新范围局限在一页内。

DAO编程------编辑数据

Step6: 编辑数据不再给出代码,只给出一个思路:
添加ListView的双击事件,将对应条目数据推入控件显示,并将Add按钮名称改为“编辑”。
记录要修改的条目的索引,即“ID”, 修改控件中的数据,完成后点击按钮,编写SQL语句,根据记录的ID,将控件数据“更新”而非“添加”到数据库
最后更新界面。
DAO编程----删除数据
在ListCtrl中按下delete按键后,删除对应的条目
Step7.1: 在View类中重载PreTranslateMessage,实现对键盘事件的响应
BOOL CW13_1View::PreTranslateMessage(MSG* pMsg) 
{
 CWnd  *pwnd = GetDlgItem(IDC_LIST1); 
 if( pMsg->message == WM_KEYDOWN )  
    {   switch( pMsg->wParam ){  
  case VK_DELETE:
   if(GetFocus() == pwnd){ //判断焦点在不在IDC_LIST1上 
    DeleteItem();//将删除代码放在这里,做成一个函数
   }
   break;
  default:
   break;
  }
 }  
 return CFormView::PreTranslateMessage(pMsg);
}
Step7.2: 编写DeleteItem函数,实现删除数据
bool CW13_1View::DeleteItem()
{ m_strTableName = "Student_Info";
 if(!m_pDatabase->IsOpen()) return false;
 if(!m_pRecordset) return false;
 if(m_pRecordset->IsOpen()) m_pRecordset->Close();
 //获取当前选择的项的索引
 int nSelect = m_List.GetSelectedCount(); 
 if (nSelect > 0) {
  CString strID; // 获取ID,根据ID拼删除SQL命令
  strID = m_List.GetItemText(nSelect, 0);
  CString strSQL;
  strSQL.Format("delete from %s where ID=%s",
   m_strTableName, strID);
  
  try{
   m_pDatabase->Execute(strSQL);
  }
  catch (CDaoException* e) {
   e->ReportError(); 
   e->Delete();
   return false;
  }
  m_List.DeleteItem(nSelect);
  UpdateData(false);
 }

 return true;
}

DAO编程----查找数据

查找数据的核心,是建立一个SQL查询语句,根据查询结果建立一个记录集,并将记录集中的检索结果显示在视图里。
首先看精确查找
精确查找允许按照姓名或者学号进行匹配,两者有一即可。
Step8.1 查找代码,根据不同情况拼SQL语句
void CW13_1View::OnFind1Button() 
{
 //精确查找代码
 if(!m_pDatabase->IsOpen()) return;
 if(!m_pRecordset)     return;
 if(m_pRecordset->IsOpen()) m_pRecordset->Close();

 UpdateData(true);
 CString strSelect;
 if (m_strName2.GetLength()==0 && m_strNum2.GetLength()==0)
 { MessageBox("请补充数据");
  return;
 }

 m_List.DeleteAllItems();

 if (m_strName2.GetLength()==0){ 
  strSelect.Format("SELECT * FROM Student_Info WHERE 学号 like '%s'", m_strNum2);
 }else if (m_strNum2.GetLength()==0){
  strSelect.Format("SELECT * FROM Student_Info WHERE 姓名 like '%s'", m_strName2);
 }else{
  strSelect.Format("SELECT * FROM Student_Info WHERE 姓名 like '%s' AND 学号 like '%s'",
   m_strName2,m_strNum2);
 }

 int nItem = 0;
 try{   // 取记录集的数据
  m_pRecordset->Open(dbOpenDynaset,strSelect);
 
  while (!m_pRecordset->IsEOF()) {
   COleVariant var;
   var = m_pRecordset->GetFieldValue(0);
   m_List.InsertItem(nItem,strVARIANT(var));
   for (int i=0; i < 5; i++){
    var = m_pRecordset->GetFieldValue(i);
    m_List.SetItemText( nItem,i,strVARIANT(var));
   }
   nItem++;
   m_pRecordset->MoveNext();
  }
 }
 catch (CDaoException* e){
  e->ReportError(); 
  e->Delete();
  return;
 }
}
模糊查找
原理与精确查找一样,只是稍微复杂一点:
要查找所有列,一旦有类似的,就显示出来。

小结

利用DAO编程,基本思路非常清晰:拼写SQL语句,调用execute方法执行该语句,分析结果并且显示。
类似,所有数据库编程接口,都采用该方式设计。
下篇给大家介绍ADO和ODBC的编程方法

解决W13_1中的遗留问题,包括:
向程序中添加“学号重复”的判断,如果学号重复,则更新而非添加。
实现模糊查询,输入字符串,显示出所有匹配的字符。如输入abey,则显示所有叫abey的学生的信息,以及邮件中出现abey字符的项。
该程序仍然不完善,尽可能修改其中的逻辑bug

解決VC6.0"Error spawning link.exe"問題

解決"Error spawning link.exe"錯誤
最近用VC6.0編寫MFC程序突然出現"Error spawning link.exe"這樣的問題,無論編譯任何程序全部都是這個錯誤,有的時候直接整個VC6.0崩潰,害得我我自己都快崩潰了.
查"Google",查資料,終於找到了可行的解決方案,不過在之前參考了很多很多網站,才慢慢知道這個問題所在,一開始還以為是我的電腦系統盤空間不足的原因.
解決方案:
點擊 "Tools" -> "Options" ->"Directories",按下圖重新設置"Excutable Files、Include Files、Library Files、Source Files"
C:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin 
C:/Program Files/Microsoft Visual Studio/VC98/BIN 
C:/Program Files/Microsoft Visual Studio/Common/TOOLS 
C:/Program Files/Microsoft Visual Studio/Common/TOOLS/WINNT 
Executable Files

C:/Program Files/Microsoft Visual Studio/VC98/INCLUDE 
C:/Program Files/Microsoft Visual Studio/VC98/MFC/INCLUDE 
C:/Program Files/Microsoft Visual Studio/VC98/ATL/INCLUDE 
Include files
C:/Program Files/Microsoft Visual Studio/VC98/LIB 
C:/Program Files/Microsoft Visual Studio/VC98/MFC/LIB 
Library Files
C:/Program Files/Microsoft Visual Studio/VC98/MFC/SRC 
C:/Program Files/Microsoft Visual Studio/VC98/MFC/INCLUDE 
C:/Program Files/Microsoft Visual Studio/VC98/ATL/INCLUDE 
C:/Program Files/Microsoft Visual Studio/VC98/CRT/SRC 
Source files
至此,OK.重新運行VC6.0,應該一切OK了.

2012/5/28 更新
方法二:
最简便的方法: 启动VC时不要用图形界面,通过在命令提示符下输入:Msdev /useenv运行(注意啦/前面有个空格).它会强制使系统环境变量全高设置成正确值.而且,只需要使用一次这样的方式运行VC,以后再次通过双击图标的方式启动也不会有问题.
参考:http://fengzidong.blog.51cto.com/4508685/832260

2012/6/9 更新
今天又有同学遇到相同的问题,经过排查,发现原因出在他的Visual Studio装在了非系统盘,而要在非系统盘找到以上你个目录是很难的事情,所以我直接建议重装了.

Google Calendar使用

Google Calendar是一个用来管理时间,提高效率的工具,我第一听说这个工具还是在校际选修课,WEB2.0资料与获取,课上听老师推荐的.自此以后就一发不可收拾,一直用到今天.

写这篇文章,我也就不多讲Google Calendar的技巧了,因为Google搜一下这样的技巧太多了.我就直接讲讲我是怎么使用这一工具的.
##ReadMore##


一.用来当课程表

每当一学期开课,我都会新建一张日程表,把课程表完整的输入到Google Calendar中,然后设置提醒方式为手机短信,这样每当上课前10min,Google都会发短信过来,提醒我要上课了,地点在,哪个教室.这样即使忘记在哪个教室上课,也能在短信通知到后及时的赶去.当然,把课表输入进去的时候千万小心,设置单双周课的时候记得发生频率是两个星期.

二.用来规划时间

每当有事情过来限定时间内完成的,我都会在上面标注,并选择提醒方式,以免到时候忘记.就比如说现在我设定过一个每星期五晚上要查看一下有没有Java作业,因为我们老师不会在上完课后立即给出题目,总要到固定时间放出题目来,所以没办法只能这样设定一下了.所以现在我养成了一个习惯,每当有一件事情要交给我做的时候,我要检查一下Calendar,这个时间段内,我有没有其他的事情.

三.团队的合作

团队间极好的沟通交流的方式,完全可以替代短信,电话通知的功能,却没有多少人用,可悲之极.这个功能我也不大用,因为身边的人,可能连Google Calendar是什么都不知道呢!!如何谈团队..具体的方法可以看这里

四.同步

如果你有一台Android手机,或者任何的智能一点的手机,电脑上所有的操作完全同步到手机,方便查看,手机上的操作,同样同步到WEB端,这样无论走到哪里,都能方便的查看自己的日程.

五.Labs

深度的Google用户一定都知道Google的每一项服务总会有那么几个Labs实验项目,我就说说我开启的那些Labs
1)Hide morning and night
这个实验功能是隐藏那些出现事情很少的时间段,就比如我,隐藏了早上0点到7点,因为这段时间根本不能有多少事情发生,拜拜浪费了很多空间,还不如隐藏了.
2)Background image
这个实验项目顾名思义,给日程表加一个背景

六.......


要是想看技巧,可以查看一下几篇文章.

為什麼我熱愛Google

身邊總是有很多人问我为什么喜歡Google,喜歡到無可救藥?那接下来我就说说我为什么如此执着于Google.

從我用上網絡起,就看很多博客的標籤雲中最大的就是Google,我原先不懂,真的不懂,那時天真的我還以為,上網就是上扣扣.現在回想起來,我感到沒有早一點接觸Google是我人生的一大憾事.
##ReadMore##
現在回憶起來,什麼原因使我一步一步愛上Google,還真是一個複雜的過程.高三的時候,高考前,爸爸跟我提了一件事----Google要推出中國----當時我的第一反應就是不可能,我已經忘記了我當時為什麼會有這樣的判斷.但是後來發生的事情大家都知道了.2010年3月23日,Google宣布推出中國.想起這個日子,我絕對不會知道這個對於我現在產生多大的影響.而那些Google退出中國的事情,我也是後來陸續翻看可能吧博客的舊文才知道.

我真心的想到Google中國北京總部門前去和那個"文物"去和一張影.

可能吧博主在文章中也寫的很清楚,Google退出中國可能致使中國互聯網倒退了十年.我現在寫這篇文章,時間已經過去了兩年了.我看到了身邊的人一點一點忘記Google,偶爾和他們提一點Google,他們總是理智氣壯的說,我們不是有Bai毒嘛.

已經回憶了很多當年的事情了,回到現在.幾點我離不開Google的理由:

一.如果你是一個熱愛自由的人,你就會喜歡上Google
Google會告訴你任何你想知道的事情,因為Google有著一個非常美好的理想----組織全球信息,並使每個人都能從中獲利(英文版 中文版),Google是一個美好的象徵.Google為多少國人提供了越過長城,走向自由的渠道.Google為多少國人提供了自學成才的途徑.Google為多少人提供了一個又一個實用的工具.這些工具讓我們一點一點從效率低下中走出.讓我們知道了互聯網是平等的,或者說互聯網又是民主的.

二.Google的服务实用,高效
下面这张图是我用的所有的Google服务.(到截图的日期为止,我总共使用40项服务).当然还有很多的服务我没有体验到,Google就已经将他们砍掉了.
Google每一項服務拿出來就是一篇很長的文章,我在各大博客,網站上看了不少,只是還沒有來得及總結.Gmail一個在一般人眼里普普通通的郵箱服務都有很多的技巧,更不必說其他更複雜的服務.值得一提的還有Google的大部分服務都有快捷鍵,我很喜歡快捷鍵,因為這樣能節省很多的時間.

三.Google是值得尊敬的公司(沒有之一)
Google創造的公司文化,成為矽谷的經典,以至於後來的公司都要去學習這一套模式.Google會為自己的理想而拋棄能為她盈利的市場.沒有一個公司願意這樣做.也沒有一個公司會這麼做.但是Google做了.Google是不一樣的.

四.Google已經從一個純粹的搜索引擎變成了一個設計Web方方面面的巨頭
雖然Larry Page主政以來,Google變了很多----其實我很慶幸我自己在Google交到Page手裡才真正的開始使用各大服務,我害怕當我沉浸在一個好的服務中的時候,那個服務被Google砍掉----Page在上台後,要做的事情就是把Google這個品牌打響亮,Google不再是分散的Google,Google的所有服务将会有统一的名字,将会一个帐号通用所有一切服务,并且Google的重心明显被放到了Google+上,Google+是Google发展的重中之重,所以才有Google+上的一次又一次更新(界面的更新,Hangout的更新,iOS设备上Google+的更新)

笑来老师 我爱Google    谁也挡不住对自由的向往。这就是为什么我们热爱Google。

SQL Server的糾結

最近學數據庫,我們教材使用的是SQL Server做實驗,所以不得已需要下載SQL Server,以前一直知道一個叫MSDN itellyou 的網站,這上面有所有MS的軟件,系統,可是最近卻不能訪問了.無奈之中找到了一個備份網站.在那裡找到了下載鏈接.現在分享一下.

SQL Server 2012

文件是下好了.卻不知道怎麼用了.沒有圖形化界面,開始菜單裡都找不到一個啟動的圖標.查網絡,還需要什麼圖形化的界面.於是無意中找到了一個Microsoft Download Center貌似在這裡能找到官方的安裝文件.
網上有人推薦 具有高级服务的 Microsoft® SQL Server® 2008 Express 看上去還可以,這個安裝文件是直接帶圖形化界面的.所以可能要簡單一點.

Quote Of The Day