Announcement

Collapse
No announcement yet.

Daten einfügen in varbinary feld

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Daten einfügen in varbinary feld

    Code:
    CREATE TABLE [dbo].[Files](
    	[ID] [int] NULL,
    	[file] [varbinary](max) NULL
    )
    
    INSERT INTO [dbo].[Files]
         VALUES
               (1, 'c:\\test.jpg')
    Kann mir vorstellen dass die Frage unnötig ist, aber ich finde einfach nichts passendes dazu.
    Wie lege ich hier einen neuen Datensatz an? also was muss ich tun, damit er mir das test.jpg in der DB speichert?
    Habe jetzt schon gott weiß wo gesucht aber keine Lösung gefunden.

  • #2
    Hallo,

    wenn der MS SQL Server 2005 genutzt wird, steht der folgende Weg offen:

    Code:
    INSERT INTO [dbo].[Files]([ID], [file])
      SELECT 1, * FROM OPENROWSET(BULK 'C:\Temp\test.jpg', SINGLE_BLOB) AS t
    GO
    Über die Abfrage SELECT DATALENGTH([file]) FROM dbo.Files kann man sich danach davon überzeugen, wie viele Bytes in der Spalte file abgelegt wurden.

    Comment


    • #3
      Code:
      INSERT INTO [TestDB].[dbo].[Files]
                 ([ID]
                 ,[file])
        SELECT 1, * FROM OPENROWSET(BULK 'C:\\temp\\test.jpg', SINGLE_BLOB) AS t
      GO
      Gibt mir dann folgende Fehlermeldung aus:

      Msg 4861, Level 16, State 1, Line 1
      Cannot bulk load because the file "C:\\temp\\test.jpg" could not be opened. Operating system error code 3(error not found).

      Ich nutze den SQL Server 2005

      Comment


      • #4
        Ich rate jetzt einfach mal:
        Du hast doppelte Backslashes verwendet. Evtl liegt es daran.

        Comment


        • #5
          Nee, hab auch schon ohne Doppelslashes probiert, gibt dieselbe Fehlermeldung

          Comment


          • #6
            Hallo,

            ich bekomme auch System Error Code 3, wenn es das Verzeichnis C:\temp nicht gibt. Vielleicht ist dies der Fehler.

            Folgender Code hat soeben funktioniert:

            Code:
            USE AdventureWorks
            GO
            CREATE TABLE myTable(FileName nvarchar(60), 
              FileType nvarchar(60), Document varbinary(max))
            GO
            
            INSERT INTO myTable(FileName, FileType, Document) 
               SELECT 'Text1.txt' AS FileName, 
                  '.txt' AS FileType, 
                  * FROM OPENROWSET(BULK N'C:\Text1.txt', SINGLE_BLOB) AS Document
            GO
            Ich hoffe, dies hilft weiter.

            Reinhold P.

            Comment


            • #7
              http://www.thescripts.com/forum/thread82439.html

              Ich denke dort habe ich was gefunden was passen könnte.
              The location of the file is relative to the SQL Server on which the BULK
              INSERT command runs. To import a file from another machine, specify an UNC
              path rather than use drive letters. For example:

              BULK INSERT myTable
              FROM '\\MyOtherServer\MyShare\Data\2003 txtfiles\abif_20031130.txt'
              Ich kann nur leider nichts damit anfangen? Wie komme ich an den UNC Pfad meiner Datei?

              Comment


              • #8
                Der UNC-Pfad setzt sich so zusammen:

                Code:
                '\\Rechnername\Laufwerk\Ordner\Datei.txt'
                Dabei ist Laufwerk der Name (und nicht nur der Buchstabe) des Laufwerks.

                Comment


                • #9
                  Hallo,

                  ich würde die Datei auf die Serverfestplatte kopieren, z.B. C:\temp und testen, ob die Datei gefunden wird.
                  Anschließend die Datei auf einen anderen Server wieder ablegen.

                  Die Pfad muss aus Sicht des Servers angegeben werden. Wenn am Server unter Start > Ausführen die Datei gefunden wird, dann sollte auch der SQL Server 2005 die Datei finden.

                  Ich hoffe, dies hilft weiter.

                  Reinhold P.

                  Comment


                  • #10
                    Also gefunden hat er die Datei mittlerweile, aber er hat keinen Zugriff drauf

                    Code:
                    Msg 4861, Level 16, State 1, Line 2
                    Cannot bulk load because the file 
                    "\\10.132.103.140\c$\Documents and Settings\heinmic\Desktop\test\Text1.txt" 
                    could not be opened. Operating system error code 5(error not found).
                    Habe dem Computer auf dem der SQL Server läuft Lesezugriff auf die Datei gegeben, aber er meint immer noch es ginge nicht.

                    ----------------

                    Wenn ich eine Datei vom Rechner des Servers nehme klappts tatsächlich.
                    Aber die Datei ist nunmal auf meinem Rechner
                    Und ich habe eigentlich keine Befugnis Dateien auf den Server zu schmeißen.

                    Comment


                    • #11
                      Hallo,

                      Und ich habe eigentlich keine Befugnis Dateien auf den Server zu schmeißen
                      wenn die Konfiguration der NTFS-Zugriffsrechte des Server-Dienstes auf das PC-Verzeichnis ebenfalls nicht in Frage kommt, muss der binäre Dateiinhalt auf der Client-Seite über ein Programm in ein Byte-Array eingelesen und dann auf dem "regulären" Weg eingefügt werden. Das Programm führt eine INSERT-Anweisung aus, die einen Parameter für die Daten aus dem Byte-Array enthält.

                      Comment

                      Working...
                      X