2017-01-17 47 views
0

將映像保存到SQL Server 2014數據庫時,將保存在類型爲Image的列中。問題是,當檢索圖像並接收它在一個變量類型byte[]做正確的轉換,我不能看到在預期的控制,我已經確定,當它發送到數據庫的字節數是139551字節,但檢索時它從數據庫中,字節數是13個字節[13]。顯然,列類型無法更改爲varbinary (MAX),因爲它僅支持8000個字節...保存或檢索BD SQL Server映像時檢索錯誤

數據庫恢復:

DataTable Tabla = ConsultasMasivasN.ConsultarSoporteIndicadorN(CodigoGI, UsuarioS); 
ViewState["TblSoporte"] = Tabla; 
gridListado.DataSource = Tabla; 
gridListado.DataBind(); 

Session["Consulta"] = Tabla; 

處理程序文件:

if (context.Session["Consulta"] != null) 
{ 
    DataTable tbRegistro = (DataTable)context.Session["Consulta"]; 
    DataRow drRegistro = tbRegistro.Select(string.Format("Codigo={0}", context.Request.QueryString["Codigo"]))[0]; 
    byte[] imagen = (byte[])drRegistro["Soporte"]; 
    context.Response.ContentType = "image/jpg"; 
    context.Response.OutputStream.Write(imagen, 0, imagen.Length); 
} 

我感謝您的幫助!

+0

'image'數據類型將在SQL的未來版本中刪除絲氨酸版本。避免在新的開發工作中使用這些數據類型,並計劃修改當前使用它們的應用程序。改爲使用'varbinary(max)'(並且它支持** 20億字節**(2 GB)的大小 - ** NOT **只有8000字節![請參閱此處](http://msdn.microsoft.com /en-us/library/ms187993.aspx) –

回答

0

解決了,改變數據庫的圖像字段的數據類型爲VARBINARY(MAX)並使用限定SqlDbType.VarBinary插入圖像存儲過程到數據庫中,所以我沒有失去字節的過程中,之前我只是在圖像字段中保存變量類型[]字節。

表:

CREATE TABLE [dbo].[SoporteIndicador](
    [Codigo] [int] IDENTITY(1,1) NOT NULL, 
    [CodigoIM] [varchar](50) NOT NULL, 
    [CodigoGI] [varchar](50) NOT NULL, 
    [Soporte] [varbinary](max) NOT NULL, 
    [NombreSoporte] [varchar](150) NOT NULL, 
    [UsuarioRegistro] [varchar](50) NOT NULL, 
    [FechRegistro] [datetime] NOT NULL 

錯誤:

public static int RegistrarSoporteIndicador(SoporteIndicador soporteIndicador) 
     { 
      int Ingreso = 0; 
      using (SqlConnection conexion = Conexion.ObtenerConexion()) 
      { 
       SqlCommand Ingresar = new SqlCommand(string.Format(
        "Insert Into SoporteIndicador (CodigoIM,CodigoGI,Soporte,NombreSoporte,UsuarioRegistro,FechRegistro) values ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}')", 
       soporteIndicador.CodigoIM, 
       soporteIndicador.CodigoGI, 
       soporteIndicador.Soporte, //Type []byte    soporteIndicador.NombreSoporte, 
       soporteIndicador.UsuarioRegistro, 
       soporteIndicador.FechRegistro), conexion); 
       Ingreso = Ingresar.ExecuteNonQuery(); 
       conexion.Close(); 
      } 
      SqlConnection cerrarcon = Conexion.CerrarConexion(); 
      return Ingreso; 
     } 

解決:

public static int RegistrarSoporteIndicador(SoporteIndicador soporteIndicador) 
     { 
      int Ingreso = 0; 
      using (SqlConnection conexion = Conexion.ObtenerConexion()) 
      { 
       using (SqlCommand cmd = new SqlCommand("PA_Guardar_Registro", conexion)) 
       { 
        cmd.CommandType = CommandType.StoredProcedure; 
        cmd.Parameters.AddWithValue("CodigoIM", soporteIndicador.CodigoIM); 
        cmd.Parameters.AddWithValue("CodigoGI", soporteIndicador.CodigoGI); 
        SqlParameter imageParam = cmd.Parameters.Add("@Soporte", System.Data.SqlDbType.VarBinary); 
        imageParam.Value = soporteIndicador.Soporte; 
        cmd.Parameters.AddWithValue("NombreSoporte", soporteIndicador.NombreSoporte); 
        cmd.Parameters.AddWithValue("UsuarioRegistro", soporteIndicador.UsuarioRegistro); 
        cmd.Parameters.AddWithValue("FechRegistro", soporteIndicador.FechRegistro); 


        Ingreso = cmd.ExecuteNonQuery(); 
        conexion.Close(); 
       } 
      } 
      SqlConnection cerrarcon = Conexion.CerrarConexion(); 
      return Ingreso; 
     }