惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
L
LINUX DO - 最新话题
Recorded Future
Recorded Future
月光博客
月光博客
博客园 - 【当耐特】
博客园 - 叶小钗
宝玉的分享
宝玉的分享
量子位
雷峰网
雷峰网
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
Vercel News
Vercel News
L
LangChain Blog
B
Blog
Y
Y Combinator Blog
爱范儿
爱范儿
GbyAI
GbyAI
S
Security @ Cisco Blogs
T
The Blog of Author Tim Ferriss
A
About on SuperTechFans
博客园 - Franky
P
Palo Alto Networks Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
云风的 BLOG
云风的 BLOG
C
Cisco Blogs
Scott Helme
Scott Helme
I
Intezer
T
The Exploit Database - CXSecurity.com
MyScale Blog
MyScale Blog
T
Tor Project blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Troy Hunt's Blog
N
News and Events Feed by Topic
大猫的无限游戏
大猫的无限游戏
F
Fortinet All Blogs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
S
Security Affairs
Cyberwarzone
Cyberwarzone
PCI Perspectives
PCI Perspectives
小众软件
小众软件
D
DataBreaches.Net
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Know Your Adversary
Know Your Adversary
Forbes - Security
Forbes - Security
S
Securelist
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
The Last Watchdog
The Last Watchdog

博客园 - 刚刚

【转】Winform中textBox通过正则表达式限制只能输入数字且是两位小数 【转】WinForm中TextBox只能输入数字 【转】C# winform窗体间传值(使用委托或事件) 【转】Visual Studio2019报错/plugin.vs.js,行:1074,错误:缺少标识符、字符串或数字的解决方法 奇虎360诉腾讯QQ垄断案之我见(3Q大战之我见) 超图软件(SuperMap)学习资料:桌面软件(Deskpro) ☠360与腾讯QQ的战争☠之我见 “密码人”越来越多将会出现“密码危机” SuperMap Objects开发——下载安装地址、许可配置和控件加载 决定将本博客技术知识从VS.Net转型SuperMap产品动态与开发 八零年代人的2009年 微软自打击盗版风波后推出了多种正版推广限时促销活动 【转】JavaScript写的Cookie类 ASP.NET开发在JavaScript有中文汉字时出现乱码时简单有效的解决方法 怀疑自己的笔记本电脑可能受到了网络攻击被人监视或操控 Visual Studio.Net 2005中验证控件的一个使用方法 对微软2008年10月20日后推行的打击盗版举措的个人看法 【转】娱乐八卦——关于孙悟空的授业师傅的分析 【转】GIS原理学习
Visual Studio.Net 2005中用SqlDataSource处理数据库特殊数据类型
刚刚 · 2008-11-29 · via 博客园 - 刚刚

      在Sql Server 2005中有哪些常用的数据类型呢?我想这些常用的数据类型应该是:char、nchar、varchar、nvarchar、text、ntext、int、float、money、bit、datetime、smalldatetime、image、binary、varbinary,还有些是在特定环境下需要的如xml、bigint、numberic、real、smallint、timestamp、tinyint等等其他一些更少用到的数据类型。这么多的数据类型,对开发人员来说最常使用的当然是存储字符串的数据类型了,他们有:char、nchar、varchar、nvarchar、text、ntext,那剩下来的自然就是这次随笔所说的“特殊数据类型”了。

      这些特殊数据类型包括:int、float、money、bit、datetime、smalldatetime、image、binary、varbinary、xml、bigint、numberic、real、smallint、timestamp、tinyint等其他没有列出的数据类型,为什么说这些数据类型是特殊的呢?那主要相对于Visual Studio.Net 2005中的SqlDataSource而言的,在SqlDataSource中默认处理且不需要考虑和编写代码的就是处理存储字符串的数据类型了,然而对于其他类型的则需要您或多或少的编写代码。我想这里面最复杂的莫过于处理二进制的数据了,比如保存到数据库的图片,加密字符串(如:密码)后的二进制等等,这两种数据在数据库中选择的数据类型应该是image和varbinary。下面就着重讲解一下如何保存这两种数据类型。

      1、首先假设数据库中已经存在一张表。其中数据字典如下表所示:

表名:T_GuestInfo(客户信息) 

英文字段名

中文字段名

数据类型

长度

主外键

是否为空

默认值

id

自动编号

int

4

主键

[自动]

guestname

客户名称

varchar

20

guestpsw

客户密码

varbinary

2000

gdatetime

注册日期

datetime

8

getdate()

photo

客户照片

image

表1   客户信息表 

      这是一个简单的数据库表,但是已经有了期望有的数据类型。

      2、其次让页面中SqlDataSource能连接到T_GuestInfo所在的数据库。

      3、设置SqlDataSource的InsertQuery为【insert into T_GuestInfo values(@guestname,@guestpsw,@gdatetime,@photo)】。

      4、此时假设页面上有了需要获取这些Sql变量的控件值,并且有一个Button,其属性ID是Btn1的按钮,用来提交数据。Button的Click事件伪代码如下所述:

 1    protected void Btn1_Click(object sender, EventArgs e)
 2    {
 3            SqlDataSource1.InsertParameters.Add("guestname", tbguestname.Text.Trim());
 4            SqlDataSource1.EnableCaching = false;
 5            int i = SqlDataSource1.Insert();
 6            if(i == 1
 7             {
 8               //提示用户成功操作。
 9           }

10    }

      此时还有几个参数没有被赋值怎么办?不用着急,在发给数据库前一定都让这些参数有值!接着……

      5、继续添加一个事件是SqlDataSource插入前的Inserting事件,即SqlDataSource1_Inserting。事件伪代码如下:

 1    protected void SqlDataSource1_Inserting(object sender, SqlDataSourceCommandEventArgs e)
 2    {
 3        byte[] bt1 = guestpswbytes;//guestpswbytes是字符串密码转换为二进制数组后的值,需要您自己从相应控件中转换,这里没有提供此代码。
 4        byte[] bt2 = photobytes;//photobytes同样需要您自己去写代码转换为二进制数组。
 5        System.Data.SqlClient.SqlParameter guestpswdb= new System.Data.SqlClient.SqlParameter("@guestpsw", System.Data.SqlDbType.VarBinary);
 6        guestpswdb.Value = bt1;
 7        e.Command.Parameters.Add(guestpswdb);
 8        System.Data.SqlClient.SqlParameter photodb = new System.Data.SqlClient.SqlParameter("@photo", System.Data.SqlDbType.Image);
 9        photodb.Value = bt2;
10        e.Command.Parameters.Add(photodb);
11        System.Data.SqlClient.SqlParameter gdatetimedb = new System.Data.SqlClient.SqlParameter("@gdatetime", System.Data.SqlDbType.DateTime);
12        gdatetimedb .Value = DateTime.Now;
13        e.Command.Parameters.Add(gdatetimedb);
14    }

      此时按F5运行程序,插入数据,SqlDataSource就能很好的插入我们期望插入的数据了。当然在SqlDataSource_Inserting事件中您还可以写入各种数据库的数据类型,除了SqlDataSource_Inserting事件外,在SqlDataSource_Updating、SqlDataSource_Selecting和SqlDataSource_Deleting事件中同样如此。

      这样我们就完成了让Visual Studio.Net 2005中SqlDataSource插入、更新、查询和删除数据库特殊数据类型的任务了。

附录:

      在完成本随笔前,本人寻找和拜读了一些与此相关的网络作品,其中本随笔就是以 http://wangjierui.blog.51cto.com/186879/109595 文章为雏形的,作者:王杰瑞

      还有一篇文章似乎网络传抄的非常泛滥(真是网络文章一大抄,而且所有抄写的人都不说明转载地址和作者,包括博客园的一位博友,还以为此文出自博客园呢),因此本以为找不到文章出处了,幸好文中有图片,图片均带有水印,最终找到了原文地址:http://dev.yesky.com/msdn/263/3034763.shtml 作者:朱先忠,网站:天极网 (根据发布日期等条件判断应该是原创地址了)