Tôi có một SqlDataReader và cần đọc một cột varbinary (max) từ nó bằng phương thức SqlDataReader.GetBytes(). Phương thức này điền một mảng byte và do đó cần biết chiều dài của dữ liệu cần đọc.Tham số 'length' nào tôi nên chuyển tới SqlDataReader.GetBytes()
Đây là nơi tôi bị lẫn lộn .. Rõ ràng là tôi muốn đọc tất cả dữ liệu đã được trả về từ cơ sở dữ liệu trong hàng/cột này vì vậy thông số 'length' nào tôi nên vượt qua? Theo như tôi thấy, SqlDataReader không cung cấp bất kỳ phương pháp nào để khám phá chiều dài của dữ liệu có sẵn, do đó phương pháp này có vẻ hơi khó xử với tôi.
Tôi bị cám dỗ chỉ cần vượt qua int.MaxValue ở đây và quên đi vấn đề nhưng một cái gì đó về điều này không ngồi ngay với tôi.
Tôi biết rằng tôi thay vì có thể gọi
byte[] value = (byte[])dataReader["columnName"];
.. và điều này dường như hoàn toàn chăm sóc của vấn đề chiều dài trong nội bộ. Tuy nhiên tôi đang làm việc với một tập các mẫu tạo mã phức tạp đã được xây dựng xung quanh các phương thức SqlDataReader.GetXXXX(). Vì vậy, tôi được gắn vào sử dụng GetBytes và cần phải hiểu cách sử dụng thích hợp của nó.
SQL có các phương thức để yêu cầu độ dài trong một varbinary - bạn phải đặt nó vào SQL: http://msdn.microsoft.com/en-us/library/ms173486.aspx - DATALENGTH. Chọn Field, DataLength (FIeld) từ Table và bạn có thể thấy độ dài. – TomTom
Cảm ơn, tôi đã xem xét việc sử dụng DATALENGTH trong SQL nhưng nó không thực sự là một giải pháp có thể chấp nhận được. Như bạn có thể đoán tất cả các hình thức này là một phần của lớp truy cập dữ liệu, do đó việc ép buộc các quy ước như vậy trong thủ tục được lưu trữ bằng văn bản để hỗ trợ chức năng cơ bản là không lớn. – Martyn
@Martyn khi tôi ở đây ... có thư viện * chuyên dụng * để đảm bảo bạn không cần phải viết mã ADO.NET tẻ nhạt ... "dapper" là (theo ý kiến thiên vị của tôi) tuyệt vời để ẩn đi những mối quan tâm này, trong khi vẫn còn rất nhẹ và không bị xâm nhập. –