将图像保存到SQL Server 2014数据库时,会保存在Image
类型的列中。问题是当检索图像并以变量类型byte[]
接收它做正确的转换时我无法在控件中看到,我已经确定在将其发送到数据库时,字节数为139551字节,但是当从数据库中检索它时,字节数是13个字节[13]。显然无法将列类型更改为varbinary (MAX)
,因为它只支持8000字节...
数据库恢复:
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 :(得分: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;
}