用Sql Server存储上载图片

思路:
任何计算机上的数据都以二进制存储.我们只需将数据以二进制的形式保存到数据库即可.
这里我们使用Sql Server数据库.用Image类型来保存二进制.


步骤:
1.当然是在Sql Server中建一个存储上传数据的表咯.

id:上载数据内容的md5值确保数据库中无重复数据,可用作文件名
data:上载文件数据
type:文件扩展名
length:数据长度
time:上载时间

CREATE TABLE [picture] (
 [id] [char] (32) COLLATE Chinese_PRC_CI_AS NOT NULL ,
 [data] [image] NULL ,
 [type] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
 [length] [int] NULL ,
 [Time] [datetime] NULL ,
 CONSTRAINT [PK_picture] PRIMARY KEY  CLUSTERED
 (
  [id]
 )  ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

2.创建一个HtmlInputFile控件对象myFile.上传的数据就是通过这个对象myFile传递进来的.它有一个重

要属性PostedFile,它是一个HttpPostedFile对象
PostedFile.ContentLength: 文件长度
PostedFile.ContentType:  文件类型
PostedFile.FileName  文件名
PostedFile.InputStream  文件流数据
PostedFile.Save()  将文件保入磁盘


3.转换上载的数据和处理要写入数据库中的数据
客户端上载的数据是以流的形式保存在HttpPostedFile对象的InputStream中.
接下来要做的就是处理数据流,将它转换成二进制数据
//----------------转换二进制--------------------//
InputStream.Seek(0,SeekOrigin.Begin); // 注意使用确保Position在开始
byte[] bdata = new byte[Length]; 
Data.Read(bdata,0,Length); 
 
//----------------以MD5储存ID-------------------//
InputStream.Seek(0,SeekOrigin.Begin);
BinaryReader br = new BinaryReader(InputStream);
char[] cd = new char[Length];
cd = br.ReadChars(Length);
string id = new string(cd);
id = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(id,"MD5");

//---------------其它存储数据--------------------//
string ExtName = PostedFile.FileName.Substring(PostedFile.FileName.LastIndexOf(".")+1) //取

扩展名
string Length = PostedFile.ContentLength //文件大小

4.ADO操作
SqlConnection myConnection = new SqlConnection(ConString);
SqlCommand UpLoadCommand = new SqlCommand("Insert into picture(id,data,type,length,time)

values(@id,@data,@type,@length,getdate())",MyClass.Con);
UpLoadCommand.Parameters.Add("@id",id);
UpLoadCommand.Parameters.Add("@data",bdata);
UpLoadCommand.Parameters.Add("@type",ExtName);
UpLoadCommand.Parameters.Add("@length",Length);

myConection.Open();
UpLoadCommand.ExecuteNonQuery();
myConnection.Close();

//----------------------------------------------------------------------------------------------------------------
读取数据库图片就不用我说了吧..Response有一个为二进制准备的BinaryWrite(byte[] buffer)方法.用它就可以把图片输出到IE上了

下面是我的源码,把功能独立到类中了.小弟没学过C#,代码漏洞百出,呵呵.献丑了.

using  System;
using  System.IO;
using  System.Web;
using  System.Data;
using  System.Data.SqlClient;

namespace  Pic
{
    
/// <summary>
    
/// MyClass 的摘要说明。
    
/// </summary>

    public class MyClass
    
{
        
public MyClass()
        
{
            
        }

        
public static string GetMD5String(string password)
        
{
            
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password,"MD5");
        }

        
public static SqlConnection Con = new SqlConnection("server=.;uid=sa;pwd=network;initial catalog=MyHomePage;");
    }

    
public class MyUpLoad
    
{
        
public MyUpLoad(HttpPostedFile UpLoadFile)
        
{
            Data 
= UpLoadFile.InputStream;
            FileName 
= UpLoadFile.FileName.ToString();
            Length 
= UpLoadFile.ContentLength;
            FileType 
=FileName.Substring(FileName.LastIndexOf(".")+1);
        }

        
public byte[] GetByte()
        
{
            Data.Seek(
0,SeekOrigin.Begin);
            
byte[] bdata = new byte[Length];
            Data.Read(bdata,
0,Length);

            
return bdata;
        }

        
public string GetID()
        
{
            Data.Seek(
0,SeekOrigin.Begin);
            BinaryReader br 
= new BinaryReader(Data);
            
char[] cd = new char[Length];
            cd 
= br.ReadChars(Length);
            
string id = new string(cd);
            
return MyClass.GetMD5String(id);
        }

        
public bool UpLoadData()
        
{
            SqlCommand UpLoadCommand 
= new SqlCommand("Insert into picture(id,data,type,length,time) values(@id,@data,@type,@length,getdate())",MyClass.Con);
            UpLoadCommand.Parameters.Add(
"@id",GetID());
            UpLoadCommand.Parameters.Add(
"@data",GetByte());
            UpLoadCommand.Parameters.Add(
"@type",FileType);
            UpLoadCommand.Parameters.Add(
"@length",Length);
            
            MyClass.Con.Open();
            
try
            
{
                UpLoadCommand.ExecuteNonQuery();
                MyClass.Con.Close();
                
return true;
            }

            
catch
            
{
                MyClass.Con.Close();
                
return false;
            }

            
        }

        
public int Length;
        
public string FileName;
        
public string FileType;
        Stream Data;
    }

}

   MyUpLoad myLoad = new MyUpLoad(myFile.PostedFile);
   Response.Write(myLoad.UpLoadData());



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1353727 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用VB6和SQL Server上传图片,可以按照以下步骤进行: 1. 首先,确保你已经安装了SQL Server数据库,并创建了用于存储图片的表。可以在数据库中创建一个表,包含一个图片字段(数据类型为VARBINARY(MAX)),以及其他需要的字段。 2. 在VB6中创建一个新的窗体,并添加一个“浏览”按钮和一个“上传”按钮。 3. 单击“浏览”按钮,使用CommonDialog控件让用户选择要上传的图片文件。可以使用以下代码实现: ```vb Dim dlg As CommonDialog Set dlg = New CommonDialog With dlg .DialogTitle = "选择图片" .Filter = "图片文件 (*.jpg, *.jpeg, *.png)|*.jpg;*.jpeg;*.png" .ShowOpen End With If dlg.FileName <> "" Then ' 将选中的图片文件路径保存到一个变量中,方便后续上传 imagePath = dlg.FileName End If Set dlg = Nothing ``` 4. 单击“上传”按钮时,连接到SQL Server数据库,并将选中的图片文件上传到数据库中。可以使用以下代码实现: ```vb Dim conn As New ADODB.Connection Dim rs As New ADODB.Recordset ' 连接到SQL Server数据库 conn.ConnectionString = "Provider=SQLOLEDB;Data Source=服务器地址;Initial Catalog=数据库名称;User ID=用户名;Password=密码;" conn.Open ' 读取选中的图片文件的二进制数据 Dim imageStream As New ADODB.Stream imageStream.Type = adTypeBinary imageStream.Open imageStream.LoadFromFile imagePath ' 执行插入操作将图片数据上传到数据库中 rs.Open "SELECT * FROM 图片表", conn, adOpenKeyset, adLockOptimistic rs.AddNew rs!图片字段名 = imageStream.Read rs.Update ' 清理资源 rs.Close conn.Close Set rs = Nothing Set conn = Nothing ``` 以上代码中,你需要替换掉注释中的“服务器地址”、“数据库名称”、“用户名”和“密码”为你自己的数据库信息,并将“图片表”和“图片字段名”替换为你自己的表和字段名称。 通过以上步骤,就可以使用VB6和SQL Server实现上传图片的功能了。请注意,这只是一个基础的教程,你可能还需要添加错误处理、显示上传结果等其他功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值