Programing

SQL Server VARBINARY 열에 Byte []를 삽입하는 방법

lottogame 2020. 11. 30. 07:42
반응형

SQL Server VARBINARY 열에 Byte []를 삽입하는 방법


아래에 강조 표시된 바이트 배열이 있습니다. SQL Server 데이터베이스 Varbinary 열에 어떻게 삽입합니까?

byte[] arraytoinsert = new byte[10]{0,1,2,3,4,5,6,7,8,9};

string sql = 
    string.format
    (
    "INSERT INTO mssqltable (varbinarycolumn) VALUES ({0});",WHATTODOHERE
    );

내 솔루션은 연결 개체가 데이터 형식을 올바르게 지정하므로 매개 변수가있는 쿼리를 사용하는 것입니다 (올바른 데이터 유형 확인 및 해당되는 경우 "위험한"문자 이스케이프 포함).

// Assuming "conn" is an open SqlConnection
using(SqlCommand cmd = new SqlCommand("INSERT INTO mssqltable(varbinarycolumn) VALUES (@binaryValue)", conn))
{
    // Replace 8000, below, with the correct size of the field
    cmd.Parameters.Add("@binaryValue", SqlDbType.VarBinary, 8000).Value = arraytoinsert;
    cmd.ExecuteNonQuery();
}

편집 : SqlCommand가 완료된 후 올바르게 처리하기 위해 John Saunders가 제안한 "using"문을 추가했습니다.


이 시도:

"0x" + BitConverter.ToString(arraytoinsert).Replace("-", "")

물론 문자열 연결보다는 매개 변수화 된 쿼리를 사용해야하지만 ...


이 시나리오에서 사용하려는 모든 어레이가 예제와 같이 작더라도 문제가되지 않습니다.

이를 큰 Blob에 사용할 경우 (예 : 많은 Mbs 또는 Gbs 크기의 큰 이진 파일을 a에 저장 VARBINARY) SQL Server의 특정 지원을 사용하여 이러한 큰 Blob의 하위 섹션을 읽고 쓰는 것이 훨씬 낫습니다. READTEXT같은 것 UPDATETEXT, 또는 현재 버전의 SQL Server SUBSTRING.

자세한 내용과 예제는 .NET Magazine의 2006 년 기사 ( "BLOB + Stream = BlobStream" , 네덜란드어, 완전한 소스 코드 포함) 또는 Peter de Jonghe의 CodeProject대한 영어 번역 및 일반화를 참조하십시오 . 둘 다 내 웹 로그 에서 링크되었습니다 .


다음과 같이 매우 간단하고 효율적인 솔루션을 사용할 수 있습니다. 제가 한 일은 실제로 기본 자리 표시 자 대신 매개 변수를 사용하고 SqlParameter 개체를 만들고 다른 기존 실행 방법을 사용하는 것입니다. 예를 들어 시나리오에서 :

string sql = "INSERT INTO mssqltable (varbinarycolumn) VALUES (@img)";
SqlParameter param = new SqlParameter("img", arraytoinsert); //where img is your parameter name in the query
ExecuteStoreCommand(sql, param);

열린 SQL 연결이 설정되어 있으면 이것은 매력처럼 작동합니다.


모든 단계에 대해이 이미지 링크를 확인하십시오. https://drive.google.com/open?id=0B0-Ll2y6vo_sQ29hYndnbGZVZms

1 단계 : 테이블에 varbinary 유형의 필드를 만들었습니다.

STEP2 : sql_variant 유형의 매개 변수를 받아들이는 저장 프로 시저를 만들었습니다.

STEP3 : 프런트 엔드 asp.net 페이지에서 객체 유형의 SQL 데이터 소스 매개 변수를 생성했습니다.

        <tr>
        <td>
            UPLOAD DOCUMENT</td>
        <td>
            <asp:FileUpload ID="FileUpload1" runat="server" />
            <asp:Button ID="btnUpload" runat="server" Text="Upload" />
            <asp:SqlDataSource ID="sqldsFileUploadConn" runat="server" 
                ConnectionString="<%$ ConnectionStrings: %>" 
                InsertCommand="ph_SaveDocument"     
               InsertCommandType="StoredProcedure">
                <InsertParameters>
                    <asp:Parameter Name="DocBinaryForm" Type="Object" />
                </InsertParameters>

             </asp:SqlDataSource>
        </td>
        <td>
            &nbsp;</td>
    </tr>

4 단계 : 내 코드에서 SQL 데이터 소스 컨트롤을 사용하여이 저장 프로 시저 호출을 통해 FileUpload Control에서 FileBytes를 업로드하려고합니다.

      Dim filebytes As Object
      filebytes = FileUpload1.FileBytes()
      sqldsFileUploadConn.InsertParameters("DocBinaryForm").DefaultValue = filebytes.ToString
      Dim uploadstatus As Int16 = sqldsFileUploadConn.Insert()

               ' ... code continues ... '

참고URL : https://stackoverflow.com/questions/1064121/how-do-i-insert-a-byte-into-an-sql-server-varbinary-column

반응형