IT

SQL Server VARBINARY 열에 바이트[]를 삽입하는 방법

itgroup 2023. 6. 22. 21:42
반응형

SQL Server VARBINARY 열에 바이트[]를 삽입하는 방법

아래에 강조 표시된 바이트 배열이 있는데, 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
    );

사용해 보십시오.

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

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

연결 개체가 데이터 형식을 올바르게 지정하기 때문에 매개 변수화된 쿼리를 사용하는 것이 제 해결책입니다(올바른 데이터 유형 확인 및 해당되는 경우 "위험한" 문자 탈출 포함).

// 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();
}

Edit: Sql Command가 완료된 후 올바르게 폐기하기 위해 John Sanders가 제안한 "사용 중"이라는 래핑 문을 추가했습니다.

이 시나리오에서 사용하려는 모든 어레이가 예처럼 작더라도 문제가 없습니다.

만약 당신이 이것을 큰 블롭에 사용할 것이라면 (예를 들어, 많은 크기의 많은 Mbs 또는 심지어 Gbs를 저장하는 것과 같은)VARBINARY그러면 SQL Server의 특정 지원을 사용하여 이러한 큰 블롭의 하위 섹션을 읽고 쓰는 것이 훨씬 더 나을 것입니다.및 같은 항목 또는 SQL Server의 현재 버전SUBSTRING.

자세한 내용과 예제는 2006년 .NET Magazine 기사("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 유형의 필드를 작성했습니다.

2단계: sql_variant 유형의 매개 변수를 수락하는 저장 프로시저를 만들었습니다.

3단계: 프론트엔드 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

반응형