Usuário com melhor resposta
Upload de Imagens em tabelas SQL - ERRO

Pergunta
-
Bom estou fazendo um sistema de upload de imagens em ASP.NET/C# sendo que as imagens serão armazenadas em meu banco de dados, porém algum erro ocorre, veja:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.SqlClient; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnEnviar_Click(object sender, EventArgs e) { if(uploadFile.HasFile) // Se o arquivo for carregado... { string fileName = Path.GetExtension(uploadFile.PostedFile.FileName); string extensao = fileName.ToLower(); // Pega a extensão do arquivo (png, gif, jpeg) string tipoArquivo = null; switch(extensao) { case ".png": tipoArquivo = "image/png"; break; case ".jpg": case ".jpeg": case ".jpe": tipoArquivo = "image/jpg"; break; case ".gif": tipoArquivo = "image/gif"; break; default: lblText.Text = "Este arquivo não é aceito! <br />"; break; } if (tipoArquivo != string.Empty) { SqlConnection conn = new SqlConnection("Initial Catalog=Estudos;Data Source=ANDRÉ-PC\\DEDE;Integrated Security=SSPI"); conn.Open(); string stringCommand = "INSERT INTO uploadImagens VALUES (@nomeArquivo, @horaUpload, @MIME, @imagem"; SqlCommand command = new SqlCommand(stringCommand, conn); byte[] imageBytes = new byte[uploadFile.PostedFile.InputStream.Length + 1]; uploadFile.PostedFile.InputStream.Read(imageBytes, 0, imageBytes.Length); SqlParameter[] param = new SqlParameter[4]; { param[0] = new SqlParameter("@nomeArquivo", txtNome.Text); param[1] = new SqlParameter("@horaUpload", DateTime.Now); param[2] = new SqlParameter("@MIME", tipoArquivo); param[3] = new SqlParameter("@imagem", imageBytes); command.Parameters.AddRange(param); } command.ExecuteNonQuery(); } else { Response.Redirect("Default.aspx"); } } } }
Bom ele diz que aquele "Path" do GetExtension não existe, porém no artigo do macoratti tudo ocorre normalmente
- Editado André .NET quarta-feira, 26 de outubro de 2011 20:41
Respostas
-
Coloque using System.IO. Veja se resolve.
--
Marque as respostas e ajude a melhorar a busca do fórum. pcfviana@gmail.com- Sugerido como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator sexta-feira, 28 de outubro de 2011 03:12
- Marcado como Resposta André .NET sexta-feira, 28 de outubro de 2011 22:40
Todas as Respostas
-
Nem vou analisar o código...
A sequencia correta é:
conn.Open(); string stringCommand = "INSERT INTO uploadImagens VALUES (@nomeArquivo, @horaUpload, @MIME, @imagem"; SqlCommand command = new SqlCommand(stringCommand); byte[] imageBytes = new byte[uploadFile.PostedFile.InputStream.Length + 1]; uploadFile.PostedFile.InputStream.Read(imageBytes, 0, imageBytes.Length); SqlParameter[] param = new SqlParameter[4]; { param[0] = new SqlParameter("@nomeArquivo", txtNome.Text); param[1] = new SqlParameter("@horaUpload", DateTime.Now); param[2] = new SqlParameter("@MIME", tipoArquivo); param[3] = new SqlParameter("@imagem", imageBytes); command.Parameters.Add(param); } command.ExecuteNonQuery(); conn.Close();
O ExecuteNonQuery executa a query. Como você pode mandar executar a query sem ter terminado de configurar o Command?
Fora isto existe o erro por que você não apontou a conexão no objeto Command. Isto que coloquei ai em cima ainda está errado. Tente fazer assim:string stringCommand = "INSERT INTO uploadImagens VALUES (@nomeArquivo, @horaUpload, @MIME, @imagem"; SqlCommand command = new SqlCommand(stringCommand, conn); byte[] imageBytes = new byte[uploadFile.PostedFile.InputStream.Length + 1]; uploadFile.PostedFile.InputStream.Read(imageBytes, 0, imageBytes.Length); SqlParameter[] param = new SqlParameter[4]; { param[0] = new SqlParameter("@nomeArquivo", txtNome.Text); param[1] = new SqlParameter("@horaUpload", DateTime.Now); param[2] = new SqlParameter("@MIME", tipoArquivo); param[3] = new SqlParameter("@imagem", imageBytes); command.Parameters.Add(param); } conn.Open(); command.ExecuteNonQuery(); conn.Close();
--
Marque as respostas e ajude a melhorar a busca do fórum. pcfviana@gmail.com
- Editado Paulo César Viana quarta-feira, 26 de outubro de 2011 20:47
-
-
Coloque using System.IO. Veja se resolve.
--
Marque as respostas e ajude a melhorar a busca do fórum. pcfviana@gmail.com- Sugerido como Resposta Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator sexta-feira, 28 de outubro de 2011 03:12
- Marcado como Resposta André .NET sexta-feira, 28 de outubro de 2011 22:40
-
Olá André,
Como o Paulo disse, faça referência ao namespace System.IO.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenrique