SQL Varbinary Blob aus der Datenbank lesen

Ich arbeite daran, Dateien in einem SQL-Blob in einer varbinären (max) Spalte zu speichern, und habe jetzt die sichere Seite der Dinge im Griff (glaube ich).

Was ich nicht herausfinden kann, ist, wie die Daten ausgelesen werden, da ich meine DB-Werte mit einer gespeicherten Prozedur abrufe. Ich sollte in der Lage sein, auf die Spaltendaten wie ds.Tables [0] .Rows [0] zuzugreifen. ["blobData"]; Daher ist es notwendig, dass ich einen SQLCommand usw. habe, wie ich ihn in Beispielen wie dem folgenden gesehen habe:

private void OpenFile(string selectedValue)
{
    String connStr = "...connStr";
    fileName = ddlFiles.GetItemText(ddlFiles.SelectedItem);

    using (SqlConnection conn = new SqlConnection(connStr))
    {
        conn.Open();
        using (SqlCommand cmd = conn.CreateCommand())
        {
            cmd.CommandText = "SELECT BLOBData FROM BLOBTest WHERE testid = " + selectedValue;

            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    int size = 1024 * 1024;
                    byte[] buffer = new byte[size];
                    int readBytes = 0;
                    int index = 0;

                    using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
                    {
                        while ((readBytes = (int)dr.GetBytes(0, index, buffer, 0, size)) > 0)
                        {
                            fs.Write(buffer, 0, readBytes);
                            index += readBytes;
                        }
                    }
                }
            }
        }
    }

Gibt es eine einfachere Möglichkeit, dies zu tun, wenn ich ohne den Befehl sql auf die benötigte Spalte zugreifen kann?

Hoffentlich war ich in meiner Frage klar genug, wenn nicht, dann frag und ich werde näher darauf eingehen!

AKTUALISIEREN

Die Situation ist jetzt wie folgt: Ich habe den Wert der Spalte "blobData", die von meiner gespeicherten Prozedur zurückgegeben wurde, und kann diesen Wert in einen Speicherstrom übergeben und "LoadDocument (memStream)" aufrufen. Dies führt jedoch dazu, dass anstelle der eigentlichen Dateianzeige nur noch ruckeliger Text angezeigt wird.

Meine Frage ist nun, gibt es eine Möglichkeit, den vollständigen Pfad einschließlich der Dateierweiterung einer in einem SQL-Blob gespeicherten Datei abzurufen? Ich bin gerade dabei, eine Filetable dafür zu verwenden, in der Hoffnung, dass ich in der Lage sein werde, den vollständigen Pfad zu finden.

UPDATE 2:

Ich habe versucht, eine temporäre Datei zu erstellen und diese ohne Erfolg zu lesen (immer noch Kauderwelsch)

                string fileName = System.IO.Path.GetTempFileName().ToString().Replace(".tmp", fileExt);

            using (MemoryStream myMemoryStream = new MemoryStream(blobData, 0, (int)blobData.Length, false, true))
            {
                using (FileStream myFileStream1 = File.Create(fileName))
                {
                    myMemoryStream.WriteTo(myFileStream1);

                    myMemoryStream.Flush();
                    myMemoryStream.Close();

                    myFileStream1.Flush();
                    myFileStream1.Close();

                    FileInfo fi = new FileInfo(fileName);

                    Process prc = new Process();
                    prc.StartInfo.FileName = fi.FullName;
                    prc.Start();
                }
            }

Cheers, H

Antworten auf die Frage(6)

Ihre Antwort auf die Frage