【发布时间】:2019-11-15 21:04:31
【问题描述】:
我需要将附件上传到 MS Access .mdb,但代码一直运行到最后,但没有任何更新。
查看查询语法并检查代码中使用的 OleDbType。
protected void Button1_Click(object sender, EventArgs e)
{
mdlTrab mdl = new mdlTrab();
mdl.nome = txtNome.Text;
mdl.trab = titTrab.Text;
mdl.campo = FileUpload1.FileBytes;
if (FileUpload1.HasFile)
{
try
{
string fileExtension = Path.GetExtension(FileUpload1.FileName);
if (fileExtension.ToLower() == ".doc" || fileExtension.ToLower() == ".docx" || fileExtension.ToLower() == ".pdf")
{
if (FileUpload1.PostedFile.ContentLength > 1024000)
{
StatusLabel.ForeColor = System.Drawing.Color.Red;
StatusLabel.Text = "Status do upload: O arquivo deve ter menos de 1000 kb!";
}
else
{
string conexaoAccess = ConfigurationManager.ConnectionStrings["conexaoAccess"].ToString();
using (OleDbConnection conexaodb = new OleDbConnection(conexaoAccess))
{
conexaodb.Open();
OleDbCommand cmd = new OleDbCommand("UPDATE tbl_reg SET Campo1 = @campo, titulo_trab = @trab WHERE nome_user = @nome", conexaodb);
cmd.Parameters.Add("@campo", OleDbType.LongVarBinary).Value = mdl.campo;
cmd.Parameters.Add("@trab", OleDbType.LongVarChar).Value = mdl.trab;
cmd.Parameters.Add("@nome", OleDbType.LongVarChar).Value = mdl.nome;
int rowsChanged = cmd.ExecuteNonQuery();
StatusLabel.ForeColor = System.Drawing.Color.Green;
StatusLabel.Text = "Arquivo carregado!";
}
}
}
else
{
StatusLabel.ForeColor = System.Drawing.Color.Red;
StatusLabel.Text = "Status do upload: Somente arquivos .doc, .docx e .pdf são aceitos!";
}
}
catch (InvalidOperationException ex)
{
StatusLabel.ForeColor = System.Drawing.Color.Red;
StatusLabel.Text = "Status do upload: Erro ao carregar arquivo, ocorreu o seguinte erro: " + ex.Message;
}
catch (OleDbException ex)
{
StatusLabel.ForeColor = System.Drawing.Color.Red;
StatusLabel.Text = "Status do upload: Erro ao atualizar banco de dados, erro oorrido: " + ex.Message;
}
catch (Exception ex)
{
Console.WriteLine("Erro: ", ex.Message);
}
}
}
模型
public class mdlTrab
{
public int codigo { get; set; }
public string nome { get; set; }
public string trab { get; set; }
public byte[] campo { get; set; }
}
预期:上传数据库中的文件。 实际结果:没有结果
【问题讨论】:
-
空的 catch 块是一个非常糟糕的主意。此外,你的空 if 块是一个相当糟糕的主意。在未来的几年里,有人会使用这个代码并说“为什么这个 f*%]*} 文件不上传?”他们必须阅读代码才能发现它被限制在 1 MB 以内。出于对理智的热爱,至少在其中放置一些日志记录或消息
-
and no error,您的评论可能是真的,也可能不是 - softwareengineering.stackexchange.com/questions/291283/… -
你忘了
ExecuteNonQuery这个命令。 -
你的代码吞下了 Excetpions。所有例外。 没有办法让您知道尝试中是否有任何地方,感谢
catch (Exception ex) { }先修复该部分。这是我经常链接的关于正确异常处理的两篇文章:blogs.msdn.microsoft.com/ericlippert/2008/09/10/… | codeproject.com/Articles/9538/… -
不,ifs 和 catch 是故意为空的,只是为了让它更小,以便在此处发布..