2017-01-17 3 views
0

イメージをSQL Server 2014データベースに保存するときは、Imageの列に保存されます。問題は、画像を取得して、それを可変のタイプのbyte[]で受け取ったときに、正しい変換ができないことがわかりました。データベースに送るときに、バイト数は139551バイトですが、それはデータベースから、バイト数は13バイトです[13]。エラーBD SQL Serverイメージの保存または取得時の取得

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

Session["Consulta"] = Tabla; 

ハンドラファイル:それだけで8000バイトをサポートしているので、明らかに... varbinary (MAX)

データベースの回復列タイプを変更することができませんでした

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の将来のバージョンで削除されますSer ver。新しい開発作業でこのデータ型を使用しないようにし、現在使用しているアプリケーションを変更する予定です。代わりに 'varbinary(max)'を使用してください(サイズは** 20億バイト**(2 GB)) - ** NOT ** **は8000バイトだけです[詳細はこちら](http://msdn.microsoft.com /en-us/library/ms187993.aspx) –

答えて

0

のvarbinary(MAX)にデータベース・イメージフィールドにデータ型を変更し、私はプロセスでバイトを失うことはありませんでしたので、画像をデータベースに挿入するためにSqlDbType.VarBinaryを定義するストアドプロシージャを使用して、 Imageフィールドに変数型[]バイトを保存する前に。

表:

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; 
     } 
関連する問題