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

推荐订阅源

C
CXSECURITY Database RSS Feed - CXSecurity.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园_首页
博客园 - 【当耐特】
小众软件
小众软件
A
About on SuperTechFans
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Martin Fowler
Martin Fowler
M
MIT News - Artificial intelligence
Vercel News
Vercel News
爱范儿
爱范儿
Google DeepMind News
Google DeepMind News
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
Threatpost
人人都是产品经理
人人都是产品经理
H
Help Net Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
LINUX DO - 热门话题
B
Blog
F
Full Disclosure
P
Proofpoint News Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Threat Research - Cisco Blogs
L
LangChain Blog
博客园 - Franky
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Project Zero
Project Zero
I
InfoQ
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Cloudflare Blog
V
Vulnerabilities – Threatpost
云风的 BLOG
云风的 BLOG
C
Cyber Attacks, Cyber Crime and Cyber Security
C
Check Point Blog
K
Kaspersky official blog
WordPress大学
WordPress大学
腾讯CDC
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
Securelist
T
Tenable Blog
N
News and Events Feed by Topic
The GitHub Blog
The GitHub Blog
W
WeLiveSecurity
Stack Overflow Blog
Stack Overflow Blog
O
OpenAI News
Blog — PlanetScale
Blog — PlanetScale
量子位
Simon Willison's Weblog
Simon Willison's Weblog
T
Tor Project blog
P
Proofpoint News Feed

博客园 - 段静迪

跟我学LINQ之一:为什么要学习LINQ C语言游戏 JAVA猜字游戏 在.NET平台下实现打印超市收银票据 JAVA上课源代码 基于三层架构的软件开发技术 MS-SQL数据库开发常用汇总 计算机类在Java中的设计于实现码 基于C语言的个人所得税计税系统 JAVA 教学实例 在.NET平台下使用SQL2000 Image类型数据 对SQL Server2000数据块进行查询 界面和业务代码分离的记事本 在.Net平台下读写文件流 键盘游戏 多线程摇奖机程序源代码 网页第五章 HTML标签详解 JDK 目录下的*.exe文件的使用
在.NET平台下使用SQL2000 Image类型数据
段静迪 · 2007-10-25 · via 博客园 - 段静迪
 

在.NET平台下使用SQL2000 Image类型数据

问题描述:

     SQL Server 2000中的ntext、text 和 image数据类型用于存储大型非 Unicode 字符、Unicode 字符及二进制数据的固定长度和可变长度数据类型。其中image可变长度二进制数据介于 0 与 231-1 (2,147,483,647) 字节之间。对于上述三种数据的存取一直是使用SQL Server2000 的一个难点。本实验实现在.NET平台下对SQL Server 2000 Image类型数据的存取操作。

实验目的:

1、熟悉文件的读写操作

2、掌握MemortStream类的使用

3、提高T-SQL脚本的编写能力

4、复习SqlParameter类和Image类

5、提高WinForm编程能力

问题分析:

在SQL Server 2000中使用Image数据类型的方法:
  1、建立过程  
  CREATE   PROCEDURE   sp_textcopy   (    
      @srvname         varchar   (30),    
      @login             varchar   (30),    
      @password         varchar   (30),    
      @dbname             varchar   (30),    
      @tbname             varchar   (30),    
      @colname         varchar   (30),    
      @filename         varchar   (30),    
      @whereclause   varchar   (40),    
      @direction     char(1))    
  AS    
  DECLARE   @exec_str   varchar   (255)    
  SELECT   @exec_str   =    
                  'textcopy   /S   '   +   @srvname   +    
                  '   /U   '   +   @login   +    
                  '   /P   '   +   @password   +    
                  '   /D   '   +   @dbname   +    
                  '   /T   '   +   @tbname   +    
                  '   /C   '   +   @colname   +    
                  '   /W   "'   +   @whereclause   +    
                  '"   /F   '   +   @filename   +    
                  '   /'   +   @direction    
  EXEC   master..xp_cmdshell   @exec_str      
   
  2、建表和初始化数据  
  create   table   表名   (编号   int,image列名   image)  
  go  
  insert   表名   values(1,0x)         --   必须的,且不是null  
  insert   表名   values(2,0x)         --   必须的,且不是null  
  go  
   
  3、读入  
  sp_textcopy   '你的服务器名','sa','你的密码','库名','表名','image列名','c:"图片.bmp','where   编号=1','I'   --注意条件是 编号=1  
   
  sp_textcopy   '你的服务器名','sa','你的密码','库名','表名','image列名','c:"bb.doc','where   编号=2','I'   --注意条件是 编号=2  
   
  go  
   
  4、读出成文件  
  sp_textcopy   '你的服务器名','sa','你的密码','库名','表名','image列名','c:"图片.bmp','where   编号=1','O'   --注意条件是 编号=1  
   
  sp_textcopy   '你的服务器名','sa','你的密码','库名','表名','image列名','c:"bb.doc','where   编号=2','O'   --注意条件是 编号=2  
  go  
   
  如果报textcopy不是可执行文件的话,你就到  
  C:"Program   Files"Microsoft   SQL   Server"MSSQL"Binn  
  目录下拷备   textcopy.exe到:  
  C:"Program   Files"Microsoft   SQL   Server"80"Tools"Binn  

通过对上述代码分析可以知道在SQL查询分析器中使用如下脚本“insert into p(pic)values('C:"Documents and Settings"All Users"Documents"My Pictures"示例图片"Water lilies.jpg')”是可以把图片保存在数据库中的。

2SqlParameter用于表示 SqlCommand 的参数中的参数,通过文件路径传递的是文件的内容,当然,SqlParameter类的Value属性也可以传递文件内容

关键代码解析

1、存储图片

//第一步:建立并打开文件流

              FileStream fs = File.Open(this.openFileDialog1.FileName,FileMode.Open

                  ,FileAccess.Read,FileShare.None);

              //第二步:声明byte型数组

              byte [] b = new byte[fs.Length];

              //第三步:读取文件内容

              fs.Read(b,0,(int)b.Length);

              fs.Close();

              /*

               * 存储一张图片到SQL 2000数据库

               * 操作方式与存储一般数据相类似

               * */

              //第四步:建立、打开数据库连接

              SqlConnection con = new SqlConnection("server =.;database = bdqn;uid = sa;pwd = sa;");

              con.Open();

              //第五步:实例化Command对象

              SqlCommand com = con.CreateCommand();

              com.CommandText="insert into p (pic)values(@pic/*@pic 是存储过程参数*/)";

              //为SqlCommand对象的SqlParameter 对象添加@pic属性

              SqlParameter sp =new SqlParameter("@pic",SqlDbType.Image);

              sp.Direction = ParameterDirection.Input;

              sp.Value = b;

              com.Parameters.Add(sp);

              //执行操作

              com.ExecuteNonQuery();

              con.Close();

2、读取图片

private void button2_Click(object sender, System.EventArgs e)

       {

           SqlConnection con = new SqlConnection("server =.;database = bdqn;uid = sa;pwd = sa;");

           con.Open();

           SqlCommand com = con.CreateCommand();

           com.CommandText="select pic from p where id = 1";

           //强制转换为byte【】数组

           byte []b = (byte[])com.ExecuteScalar();

           con.Close();

           //通过MemoryStream流实例化Image对象

           MemoryStream ms = new MemoryStream(b,0,(int)b.Length);

           this.pictureBox1.Image = Image.FromStream(ms);

       }

存在问题及解决

问题扩充