Inquiridor
Gravar imagem no sql server.

Pergunta
-
Pessoal estou enrolado...
criei uma aplicação em camadas:
classe de acesso:
{
Conecta();
SqlCommand k = new SqlCommand("INSERT INTO SYS_PARAMETROS (EMP_CNPJ,EMP_LOGO_CLI) VALUES (@cnpj, @EMP_LOGO_CLI)",sCon);k.Parameters.Add(
"@emp_Cnpj", SqlDbType.VarChar, 14);k.Parameters.Add(
"@emp_logo_cli", SqlDbType.Image);k.Parameters[
"@emp_Cnpj"].Value = Cnpj;k.Parameters[
"@emp_logo_cli"].Value = Logo_cli; try{
// SqlCommand Command = new SqlCommand(k, sCon);k.ExecuteNonQuery();
}
catch (SqlException ex){
throw ex;}
finally{
Desconecta();
}
}
classe interface:
byte[] imagemEmBytes = null;
....
clpParametros par = new clpParametros();
par.Logo_cli = imagemEmBytes;
par.insParametros();
da um erro de conversao
Alguem pode me ajudar????
Todas as Respostas
-
MOF,
Eu tenho um exemplo em VB.NET para gravar e exibir uma imagem armazenada no banco de dados SQL Server Compact (Precisa apenas alterar o provider para SQL Server)
Veja se ajuda:
Code SnippetOption
Explicit OnOption
Strict On'provider do banco de dados
Imports
System.Data.SqlServerCeImports
System.Data'outros
Imports
System.Text 'StringBuilderImports
System.Configuration 'ConnectionStringsImports
System.IO 'Path.CombineCarregando:
Code SnippetPrivate Sub CarregarImagem(ByVal strCountryID As String)
'
'carregando a imagem do banco de dados ' Try 'definindo a string de conexÆo do banco de dados Dim strConexao As String = _ConfigurationManager.ConnectionStrings(
"SQLServerCompact").ToString Dim oConn As New SqlCeConnection(strConexao) Dim strSQL As New StringBuilder Dim oTable As New DataTable() Dim oCmd As SqlCeCommand = NothingstrSQL.Append(
"SELECT ")strSQL.Append(
" Flag ")strSQL.Append(
" FROM Country ")strSQL.Append(
" WHERE CountryID = @CountryID ") 'abrir conexÆooConn.Open()
'definindo os parƒmetros do SqlCommandoCmd =
New SqlCeCommand(strSQL.ToString, oConn)oCmd.CommandType = CommandType.Text
oCmd.Parameters.Add(
New _SqlCeParameter(
"@CountryID", SqlDbType.NChar, 3)).Value = strCountryID 'carregando os dados do banco de dados Dim oDataReader As SqlCeDataReader = _oCmd.ExecuteReader(CommandBehavior.CloseConnection)
'limpar a imagem correntepicImagem.Image =
NothingpicImagem.Refresh()
oDataReader.Read()
If Not (oDataReader("Flag") Is DBNull.Value) Then Dim bits As Byte() = CType(oDataReader("Flag"), Byte()) Dim memorybits As New MemoryStream(bits) Dim oBitmap As New Bitmap(memorybits)picImagem.Image = oBitmap
picImagem.Refresh()
'liberando os objetosoConn.Dispose()
oCmd.Dispose()
oDataReader.Dispose()
End If Catch ex As SqlCeExceptionMessageBox.Show(ex.Message,
"erro ao carregar a imagem do banco de dados.", MessageBoxButtons.OK, MessageBoxIcon.Information)picImagem.Image =
NothingpicImagem.Refresh()
End Try End SubSalvando:
Code SnippetMessageBox.Show(
"Informe a imagem a ser gravada no banco de dados.", "Salvar Imagem", MessageBoxButtons.OK, MessageBoxIcon.Information) Else 'carregando a imagem Dim fsImagem As FileStreamfsImagem =
New FileStream(strImagem, FileMode.Open) Dim fiImagem As FileInfo = New FileInfo(strImagem) Dim l As Long = fiImagem.Length Dim lung As Long = Convert.ToInt32(fiImagem.Length) Dim picture(CType(fiImagem.Length, Integer)) As BytefsImagem.Read(picture, 0,
CType(fiImagem.Length, Integer))fsImagem.Close()
'definindo a string de conexÆo do banco de dados Dim strConexao As String = _ConfigurationManager.ConnectionStrings(
"SQLServerCompact").ToString Dim oConn As New SqlCeConnection(strConexao) Dim strSQL As New StringBuilder Dim oTable As New DataTable() Dim oCmd As SqlCeCommand = NothingstrSQL.Append(
"UPDATE Country ")strSQL.Append(
" SET Flag = @Flag ")strSQL.Append(
" WHERE CountryID = @CountryID ") 'abrir conexÆooConn.Open()
'definindo os parƒmetros do SqlCommandoCmd =
New SqlCeCommand(strSQL.ToString, oConn)oCmd.CommandType = CommandType.Text
oCmd.Parameters.Add(
New _SqlCeParameter(
"@Flag", SqlDbType.Image)).Value = pictureoCmd.Parameters.Add(
New _SqlCeParameter(
"@CountryID", SqlDbType.NChar, 3)).Value = strCountryID 'atualizando os dados no banco de dadosoCmd.ExecuteNonQuery()
'liberando os objetosoConn.Close()
oCmd.Dispose()
MessageBox.Show(
"Registro atualizado com sucesso no banco de dados.", "Salvar Imagem", MessageBoxButtons.OK, MessageBoxIcon.Information) End If Catch ex As SqlCeExceptionMessageBox.Show(ex.Message,
"erro ao atualizar a imagem do banco de dados.", MessageBoxButtons.OK, MessageBoxIcon.Information) Return False End Try End Function[ ]'s
Laércio
-
Meu amigo, boa tarde.
O codio eu tenho, o problema é que quando vou repassar o campo da um erro de conversao.
não estou sabendo converter byte em byte[].
no meu banco o campo esta definido como image;
na minha classe o metodo esta definido como byte;
ai quando tento enviar da classe de interface para o dados da erro de conversão.
é esse meu problema.
-
Mof,
Bom Dia!
Tente utilizar esta função para converter a imagem:
Função para conversãoImports System.IO
Public Class util
Public Shared Function ConverterImagemEmByteArray(ByVal imageToConvert As System.Drawing.Image) As Byte()
Dim Ret() As Byte
Using ms As New MemoryStream()
imageToConvert.Save(ms, imageToConvert.RawFormat)
Ret = ms.ToArray
ConverterImagemEmByteArray = Ret
End Using
End Function
End Class -
-
MOF,
Se precisar, o código em C está abaixo:
Função para converter imagem em ByteArrayusing System.IO;
public class util
{
public static byte[] ConverterImagemEmByteArray(System.Drawing.Image imageToConvert)
{
byte[] functionReturnValue = null;
byte[] Ret = null;
using (MemoryStream ms = new MemoryStream()) {
imageToConvert.Save(ms, imageToConvert.RawFormat);
Ret = ms.ToArray;
functionReturnValue = Ret;
}
return functionReturnValue;
}
} -
-
Vê se você pode me ajudar.
eu tenho uma aplicação em 2 camadas.
A Primeira:
{
#region
Propriedades e campos private string _cnpj; public string Cnpj{
get { return _cnpj; } set { _cnpj = value; }}
private string _razao_social; public string Razao_social{
get { return _razao_social; } set { _razao_social = value; }}
private byte _logo_cli; public byte Logo_cli{
get { return _logo_cli; } set { _logo_cli = value; }}
private byte _logo_sof; public byte Logo_sof{
get { return _logo_sof; } set { _logo_sof = value; }}
#endregion
{
Conecta();
SqlCommand k = new SqlCommand("INSERT INTO SYS_PARAMETROS (EMP_CNPJ,EMP_LOGO_CLI) VALUES (@cnpj, @EMP_LOGO_CLI)",sCon);k.Parameters.Add(
"@emp_Cnpj", SqlDbType.VarChar, 14);k.Parameters.Add(
"@emp_logo_cli", SqlDbType.Image);k.Parameters[
"@emp_Cnpj"].Value = Cnpj;k.Parameters[
"@emp_logo_cli"].Value = Logo_cli; try{
// SqlCommand Command = new SqlCommand(k, sCon);k.ExecuteNonQuery();
}
catch (SqlException ex){
throw ex;}
finally{
Desconecta();
}
}
so que na camada interface :
byte[] imagemEmBytes = null
...
clpParametros par = new clpParametros();
par.Logo_cli = Convert.ToByte(imagemEmBytes);
par.insParametros();quando eu tento gravar, não vai.
eu preciso de uma conversão de byte[] para byte.
ve se pode me ajudar amigo.