Ako načítať a uložiť binárne dáta (obrázky) z a do databázy spigi - 13. 2. 2003 16:34 - 8074 views Raz za čas sa každý stretneme s problémom ukladania obrázkov do databázy a prípadne zobrazenia obrázkov uložených v DB na web stránke. V podstate je možné tento návod použiť na ľubovolné binárne dáta, nielen pre obrázky. Ako musí vyzerať databázová tabuľka Na SQL Serveri si vytvoríme ukážkovú tabuľku 'BinaryData', ktorá bude obsahovať tieto polia: ID – Integer – identifikačné číslo (primárny kľúč) Desc – NVarChar(50) – popis vložených dát TypeOfData – NVarChar(50) – typ uložených dát (napr.: "image/jpeg") BinData – Image – uložené binárne dáta Postup ako uložiť dáta na SQL Server Ako uploadneme súbor na server sme sa zoznámili v minolom článku na adrese http://www.aspnet.sk/articles.aspx?s=2&cat=5&articleID=6. Takže túto problematiku už nebude rozoberať. Ak sa zameriame na príklad (s rozdielom, že na stránku vložíme ešte jeden textbox s názvom TextBox1) z minulého článku, tak môžeme rozšíriť procedúru tlacitko_Click o nasledújúci kód:'Načítame si všetky potrebné hodnotyDim _dataStream As Stream = subor.PostedFile.InputStreamDim _dataLenght As Integer = subor.PostedFile.ContentLenghtDim _dataType As String = subor.PostedFile.ContentTypeDim _dataDescription As String = TextBox1.Text.ToStringDim _dataBinary() As Byte = New Byte(_dataLenght)Dim _query As String 'na priebežné ukladanie dotazov_dataStream.Read(_dataBinary, 0, _dataLenght)'Tu je potrebné nastaviť správne Connection String na pripojenie na SQL ServerDim _connection As SqlConnection = New SqlConnection(„connection_string_to_db“)'A samotné ukladanie dát do DB :-)_query = "INSERT INTO BinaryData(Desc, TypeOfData, BinData) VALUES (@desc, @typeofdata, @bindata)"Dim _sqlCommand As SqlCommand = New SqlCommand(_query)Dim paramDesc As SqlParameter = New SqlParameter("@desc",SqlDbType.VarChar,50) paramDesc.Value = _dataDescription _sqlCommand.Parameters.Add(paramDesc)Dim paramTypeOfData As SqlParameter = New SqlParameter("@typeofdata", SqlDbType.VarChar,50) paramTypeOfData.Value = _dataType_sqlCommand.Parameters.Add(paramTypeOfData)Dim paramBinData As SqlParameter = New SqlParameter("@bindata", SqlDbType.Image) paramBinData.Value = _dataBinary_sqlCommand.Parameters.Add(paramBinData)_connection.Open()_sqlCommand.ExecuteNonQuery() _connection.Close()Takto máme uložené dáta, ktoré boli odoslané z web stránky na SQL Server, uložené v databáze. Teraz si ukážeme, ako tieto dáta z databázy prečítať a odoslať web browseru ako binárne dáta, určené pre download (obrázky a niektoré dokumenty sa zobrazujú priamo v prehladači). Načítanie dát Pri testovaní nezabudnite tejto stránke predať parameter za názvom "page.aspx?id=XXX", kde XXX je ID uložených dát z predchádzajúceho príkladu. Private Sub Page_Load()Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Dim _idcko As String = Request.QueryString("id") Dim _query As String = "SELECT BinData, TypeOfData FROM BinaryData WHERE ID = " & _idcko Dim _connection As SqlConnection = New SqlConnection(„connection_string_to_db“) Dim command As SqlCommand = New SqlCommand(_query, _connection) _connection.Open() Dim dr As SqlDataReader = command.ExecuteReader() If dr.Read() Then 'Aby sa prehliadač dozvedel, aké sú to dáta, nastavíme ContentType Response.ContentType = dr("TypeOfData").ToString() 'Prípadne ešte môžeme nastaviť názov súboru, ktorý posielame prehliadaču... 'je to dobré pokiaľ posielame nejaké dokumenty, zip súbory a podobne :-) Response.AddHeader("Content-Disposition", "attachment; filename=""subor.jpeg""") 'Musíme pretypovať dáta natiahnuté z DB opäť na typ Byte()!!! 'a následne vypíšeme tieto dáta na výstup. Response.BinaryWrite(CType(dr("BinData"), Byte())) End If _connection.Close()End SubTakže asi takto nejako by to malo vyzerať. V podstate sme vybrali dáta z datového zdroja pomocom SQL príkazu SELECT a následne vypísali na výstup pomocou Response.BinaryWrite() ... (niečo podobné ako Response.Write()).