Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tôi có thể sử dụng một luồng để CHÈN hoặc CẬP NHẬT một hàng trong SQL Server (C #) không?

Bạn sẽ có thể chuyển một bản sao của SqlBytes làm tham số cho SqlCommand bất cứ nơi nào một varbinary là cần thiết. Cũng SqlBytes đó lớp có quá tải hàm tạo bao bọc một Stream . Vì vậy, chỉ cần tạo một SqlBytes ví dụ từ luồng, sau đó chuyển nó vào dưới dạng giá trị tham số.

Nói cách khác, hãy điều chỉnh điều đó vào mã đã sửa đổi của bạn, thay vì điều này:

MemoryStream _MemoryStream = new System.IO.MemoryStream();
_Image.Save(_MemoryStream, _ImageFormat);
SqlParameter _SqlParameter = new 
    SqlParameter("@" + _ImageFieldName, SqlDbType.Image);
_SqlParameter.Value = _MemoryStream.ToArray();
_SqlCommand.Parameters.Add(_SqlParameter);

Sử dụng cái này:

MemoryStream _MemoryStream = new System.IO.MemoryStream();
_Image.Save(_MemoryStream, _ImageFormat);
_MemoryStream.Position = 0;  // I *think* you need this
SqlParameter _SqlParameter = new 
    SqlParameter("@" + _ImageFieldName, SqlDbType.VarBinary);
_SqlParameter.Value = new SqlBytes(_MemoryStream);
_SqlCommand.Parameters.Add(_SqlParameter);

Tất nhiên, đừng quên loại bỏ MemoryStream và tất cả những IDisposable khác này các trường hợp sau khi lệnh được thực thi.

Chỉnh sửa:OK, tôi vừa xem phần cuối của bản chỉnh sửa của bạn, điều này ngụ ý rằng dữ liệu cực kỳ lớn và bạn không muốn nó kết thúc trong bộ nhớ và điều này thực sự sẽ không giải quyết được vấn đề đó. Điều là, nếu giá trị lớn như vậy, thì việc lưu trữ nó trong varbinary là một ý kiến ​​tồi. ở vị trí đầu tiên.

Nếu bạn đang sử dụng SQL Server 2008, bạn có thể (và nên!) Sử dụng FILESTREAM để thay thế. Điều này thực sự không hỗ trợ phát trực tuyến "true" trong ADO.NET thông qua lớp SqlFileStream.

Nếu bạn không thể sử dụng FILESTREAM lưu trữ, thì tôi e rằng một lúc nào đó bạn sẽ phải đối phó với việc dữ liệu trong bộ nhớ, đó là cách ADO.NET hoạt động khá nhiều.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy cập vào tập hợp kết quả từ bên trong các thủ tục đã lưu trữ Transact-SQL SQL Server

  2. TSQL Thử / Bắt trong Giao dịch hay ngược lại?

  3. 3 cách trả về tất cả các bảng KHÔNG có khóa chính trong SQL Server

  4. Làm thế nào để có được ngày cuối cùng của tuần trước bằng sql?

  5. Hết thời gian chờ kết nối cho máy chủ SQL