可不可以把图片保存在sqlserver内??
怎样操作??

解决方案 »

  1.   

    将uploadfile.postedfile.inputstream保存到一个字节数组中,然后用字节数组做参数传给
    command.parameter就可以了。
      

  2.   

    可以,以二进制数据的形式。
    俺实现过vb.ent的代码……
      

  3.   

    当然可以!使用image字段或者可以保存2进制类型的字段,在使用byte[]将数据写进去就可以了
      

  4.   

    http://www.dotnetjunkies.com/Article/C4A2ACC3-C6B4-4E4C-802A-85B8DBEC7F25.dcik
      

  5.   

    如何把图片上传到数据库中并显示出来?imgupload.aspx
    <%@ Page EnableSessionState="false" explicit="true" strict="true" MaintainState="false"%>
    <%@Import Namespace="System.Data.Sql" %>
    <%@Import Namespace="System.IO"%>
       <script language="VB" runat=server>
           Sub UploadBtn_Click(Sender as Object, E as EventArgs)
    Dim imgStream as Stream  
    Dim imgLen as Integer   
    Dim imgName_value as string
    Dim imgContentType as String 
    Dim imgUploadedName as String----------------------------------------------------------------------------------------------------------------
    imgStream = UploadFile.PostedFile.InputStream
                              ' 处理图片数据流
    imgLen = UploadFile.PostedFile.ContentLength
                              ' 获知要创建多长的字节数组
    imgUploadedName = UploadFile.PostedFile.FileName
    Dim imgBinaryData(imgLen) as Byte
                              ' 创建一个字节数组
    imgContentType = UploadFile.PostedFile.ContentType
                              ' 处理图片数据类型,如image/gif或image/jpeg
    imgName_value = imgName.Value
                              ' 给图片做一个切题的说明(这样,数据库的图片就有两个名字了).一个是上传时原本的文件名,另一个是用户在上传时输入的说明.如果这个说明在上传时没有输入,我们将通过UploadFile.PostedFile.FileName.检索该图片原本的文件名.但是, UploadFile.PostedFile.FileName.返回的是上传图片的完整路径,如可能是: C:\intels\chunfeng.jpg,因此,在稍后我们还要写一个函数来处理一下
    Try
    If imgName_value.Length < 1 then
    imgName_value =  GetLastRightOf("\",imgUploadedName ) 
    End if
    Catch myEx as Exception
    imgName_value =  GetLastRightOf("\",imgUploadedName ) 
    End Try
    ----------------------------------------------------------------------------------------------------------------         Dim  n as Integer = imgStream.Read(imgBinaryData, 0, imgLen)
                     ' 处理图片数据流,并把它转换为一个字节数组
    Dim NumRowsAffected as Integer = MyDatabaseMethod(imgName_value, imgBinaryData, imgContentType)
                If NumRowsAffected > 0 then
                Response.Write ( "<BR>恭喜,图片上传成功!" )     
    Else
                Response.Write ( "<BR> 噢,图片上传失败!" )     
    End if

    End Sub----------------------------------------------------------------------------------------------------------------
    ' 这个函数就是刚才上面提到的处理形如: C:\intels\chunfeng.jpg文件名的函.GetLastRightOf ()在最后位置寻找"\",一旦定位,就储存到变量 StrPos里,调用SubString()字符串对象方法,并返回在最后那个"\"后面的一切字符.调用String.SubString()应该是SubString(StrPos + 1),因为"\"的长度也要说明,所以要把StrPos加1
            Function GetLastRightOf(LookFor as String, myString as String) as String
    Dim StrPos as Integer
    StrPos = myString.LastIndexOf(LookFor)
     Return myString.SubString(StrPos + 1)
            End Function
            
    ----------------------------------------------------------------------------------------------------------------
    ' 当数据提交,要分析二进制数据并插入到数据库中去,因此,我们需要两个函数来完成:连接字符串和插入图片到数据库.这是后者,可在查询中定义参数哦
            Function MyDatabaseMethod(imgName As String, imgbin As Byte(), imgcontenttype as String) As Integer
                Dim connection as New SQLConnection( sqlConnString() )
                Dim command as New SQLCommand( "INSERT INTO Image (img_name,img_data,img_contenttype) VALUES ( @img_name, @img_data,@img_contenttype )", connection )
                ' 参数img_name是图片说明或名称; img_data是二进制或字节数组; img_contenttype是图片数据类型,如image/gif或image/jpeg
                Dim param0 As New SQLParameter( "@img_name", SQLDataType.VarChar,50 )
                param0.Value = imgName
                command.Parameters.Add( param0 )
                
                Dim param1 as New SQLParameter( "@img_data", SQLDataType.Image )
                param1.Value = imgbin
                command.Parameters.Add( param1 )
                
                Dim param2 as New SQLParameter( "@img_contenttype", SQLDataType.VarChar,50 )
                param2.Value = imgcontenttype
                command.Parameters.Add( param2 )
    connection.Open()
    ' 打开一个到数据库的连接
    Dim numRowsAffected as Integer = command.ExecuteNonQuery()
    ' 通过调用command.ExecuteNonQuery()执行命令
                connection.Close()
                
                Return numRowsAffected
            
            End Function    ---------------------------------------------------------------------------------------------------------------
    Private Function    sqlConnString() as String
            REM -- Get Connstring from config.web 
            Dim Context as HttpContext = HttpContext.Current
            Dim AppSettings as HashTable = Ctype(Context.GetConfig("appsettings"),HashTable)
            Dim myDSN as String = Ctype(AppSettings("cnTest"),String)
            Return myDSN
            ' 这个函数很简单:读取数据库连接字符串
        End Function
     ---------------------------------------------------------------------------------------------------------------    </script>
    <html>
    <title>精彩春风之上传图片到数据库</title>
    <body>----------------------------------------------------------------------------------------------------------------
    '建立上传图片的表格
    <form enctype="multipart/form-data" runat=server id=form1 name=form1>
    ' enctype属性向浏览器和服务器说明上传二进制数据
    请输入图片说明:
    <input type=text id=imgName runat="server" />
    'type=text控制一个对话框给用户
    <br>选择上传的图片: 
        <input id="UploadFile" type=file runat=server>
        <asp:button Text="上传" OnClick="UploadBtn_Click" runat=server/>
    </form>
    ----------------------------------------------------------------------------------------------------------------  </body>
    </html>imgview.aspx
    <%@ Page EnableSessionState="false" explicit="true"  MaintainState="false"%>
    <%@ Import Namespace="System.Data.Sql" %>
    <script language="VB" runat="server">
    Sub Page_Load(sender As Object, e As EventArgs)
    Dim imgid as String = Request.QueryString("id")
    Dim sqlText as String = "SELECT img_name, img_contenttype, img_data FROM image WHERE img_pk=" & imgid 
    Dim dbRead AS SQLDataReader
    Dim sqlCmd AS SQLCommand
    sqlCmd = New SQLCommand(sqlText,sqlConnString() )
    sqlCmd.ActiveConnection.Open()
    sqlCmd.execute(dbRead )
    If  dbRead.Read()
    Response.ContentType = dbRead.Item("img_contenttype").ToString()
    Response.BinaryWrite ( dbRead.Item("img_data") )
    End If 
    End Sub
        Private Function    sqlConnString() as String
            ' 从config.web 中获取Connstring from 
            Dim Context as HttpContext = HttpContext.Current
            Dim AppSettings as HashTable = Ctype(Context.GetConfig("appsettings"),HashTable)
            Dim myDSN as String = Ctype(AppSettings("cnTest"),String)
            Return myDSN
        End Function
    </script>image.sql
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[image]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[image]
    GO
    CREATE TABLE [dbo].[image] (
    [img_pk] [int] IDENTITY (1, 1) NOT NULL ,
             //主关键字
    [img_name] [varchar] (50) NULL ,
             //图片说明
    [img_data] [image] NULL ,
             //储存二进制图像数据
    [img_contenttype] [varchar] (50) NULL 
             //图片数据分类类型,如"image/gif"或"image/jpeg",以便客户端识别
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    ALTER TABLE [dbo].[image] WITH NOCHECK ADD 
    CONSTRAINT [PK_image] PRIMARY KEY  NONCLUSTERED 
    (
    [img_pk]
    )  ON [PRIMARY] 
    GO
      

  6.   

    存和读private void button1_Click(object sender, System.EventArgs e)
    {
    FileStream fs = new FileStream("遗迹.jpg",FileMode.Open,FileAccess.Read);
    byte[] bytes = new byte[fs.Length];
    fs.Read(bytes,0,(int)fs.Length);
    string sql = "insert TestFiles(MyFileName,FileType,MyFile)values(@FN,@FT,@MF)";
    SqlCommand com = new SqlCommand(sql,this.sqlCon);
    SqlParameter FN = new SqlParameter("@FN",SqlDbType.VarChar);
    FN.Value = "遗迹";
    com.Parameters.Add(FN);
    SqlParameter FT = new SqlParameter("@FT",SqlDbType.VarChar);
    FT.Value = "JPG";
    com.Parameters.Add(FT);
    SqlParameter MF = new SqlParameter("@MF",SqlDbType.Image);
    MF.Value = bytes;
    com.Parameters.Add(MF);
    com.CommandType = CommandType.Text;

    sqlCon.ConnectionString  = this.conStr;
    try
    {
    sqlCon.Open();
    com.ExecuteNonQuery();
    sqlCon.Close();
    MessageBox.Show("存入成功!");
    }
    catch(Exception ex)
    {
    throw ex;
    }
    finally
    {
    sqlCon.Close();
    }
    } private void button2_Click(object sender, System.EventArgs e)
    {
    string sql = "select MyFile from TestFiles where id = 1";

    sqlCon.ConnectionString = this.conStr; SqlCommand readComm = new SqlCommand(sql,this.sqlCon); SqlDataReader dr = null; FileStream fs = null; BinaryWriter bw = null; int bufferSize = 100;  byte[] outbyte = new byte[bufferSize]; long retval;  long startIndex = 0;
    try
    {
    sqlCon.Open();
    dr = readComm.ExecuteReader();
    while(dr.Read())
    {
    fs = new FileStream("TakeOut.jpg",FileMode.OpenOrCreate,FileAccess.Write); bw = new BinaryWriter(fs); retval = dr.GetBytes(0, startIndex, outbyte, 0, bufferSize);

    while (retval == bufferSize)
    {
    bw.Write(outbyte);
    bw.Flush();

    startIndex += bufferSize;
    retval = dr.GetBytes(0, startIndex, outbyte, 0, bufferSize);
    } // Write the remaining buffer.
    bw.Write(outbyte, 0, (int)retval - 1);
    bw.Flush(); // Close the output file.
    bw.Close();
    fs.Close();

    Image im = Image.FromFile("TakeOut.jpg"); this.pictureBox1.Image = im;
    }
    sqlCon.Close();
    }
    catch(Exception ex)
    {
    throw ex;
    }
    finally
    {
    sqlCon.Close();
    bw.Close();
    fs.Close();
    }
    }
      

  7.   

    这样添加到数据库中的图片是否可以修改呢?比如利用update用另一章图片的二进制覆盖这一图片呢?