Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lab Design

[Resolvido] Recuperar ultimo registro na tabela do MySQL em C#

Recommended Posts

Depois de muito garimpar pela net consegui resolver o meu problema então posto aqui para caso alguem necessite.

Minha database mysql no provedor ainda não suporta stored procedure que claro seria bem mais fácil.

 

 

 

1) Baixei o componente no site do MySql, descompactei e arrastei a dll MySql.Data.Dll para a pasta Bin do meu projeto.

 

2) Criando a conexão no web.config

<connectionStrings>

<add name="JerodString" connectionString="Data Source=mysql.dominio.com.br; Database=database; User Id=usuarioMysql; Password=senhaMySql; pooling=false"/>

</connectionStrings>

No meu caso é usado class onde o form acessa diretamente através dos mecanismos do net.

abaixo o método responsavel pela gravação.

 

nas namespaces necessárias

using MySql.Data.MySqlClient;

using System;

using System.Data;

using System.Configuration;

using System.IO;

using System.Web;

using System.Web.Configuration;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Collections.Generic;

 

método de gravação

///<param name="parentId"></param>

[system.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjec

tMethodType.Insert, false)]

public static int Save(int produto_id, string codigo, string descricao, string peso, string info, string imagem)

{

//Initialize command

if(codigo == "")

return -1;

 

if(descricao == "")

return -2;

 

if(info == "")

return -3;

 

peso = peso.Replace(",", ".");

 

double dPeso;

try

{

dPeso = Convert.ToDouble(peso);

}

catch

{

dPeso = 0;

}

 

string sql;

if(produto_id == 0)

sql = "INSERT INTO produtos(codigo, descricao, info, peso, datacad) VALUES('" + codigo + "',upper('" + descricao + "'),'" + info + "'," + peso + ", now())";

else

sql = "UPDATE produtos SET codigo='"+ codigo +"', descricao=upper('"+ descricao +"'), info='"+ info +"', peso="+ peso +" WHERE produto_id="+ produto_id;

 

MySqlConnection con = new MySqlConnection(WebConfigurationManager.ConnectionStrings["JerodString"].ConnectionString);

MySqlCommand cmd = new MySqlCommand(sql, con);

cmd.CommandType = CommandType.Text;

 

using(con)

{

con.Open();

cmd.ExecuteNonQuery();

if(produto_id == 0)

{

cmd.CommandText = "SELECT LAST_INSERT_ID()"; // pega o ID do ultimo registro gravado

produto_id = Convert.ToInt32(cmd.ExecuteScalar().ToString());

}

}

return produto_id; // retorna o id do registro gravado.

}

o retorno acima é para o codebehind da página que o chamou.

 

o metodo abaixo é acionado no retorno do class, a chamada foi configurada no ObjectDataSource do FormView

 

protected void grdProduto_Inserted(object sender, ObjectDataSourceStatusEventArgs e)

{

int ret = Convert.ToInt16(e.ReturnValue.ToString());

// aqui é pego o regorno do class - eu uso negativo para indicar algum erro e se ret for maior que "0" ele guardará o Id do novo registro gravado

 

 

if (ret == -1)

message.Text = "Não foi informado o código do produto!";

else if(ret == -2)

message.Text = "Não foi informado a descrição do produto!";

else if(ret == -3)

message.Text = "Não foi informado as informações técnicas do produto!";

else

{

saveImage(ret); // precisava do ID do registro para atualizar a base de dados com o upload da imagem

grdProdutos.DataBind(); // atualiza o grid de produtos

message.Text = "Registro gravado com sucesso !<br />"; // mostra mensagem abaixo do grid.

}

}

 

// faz upload dos arquivos

public void saveImage(int produto_id)

{

 

// imagem para o topo do mailing

FileUpload upload = _imagem;

if(!_imagem.HasFile)

return;

 

else

{

string tipo = upload.PostedFile.ContentType;

if(tipo != "image/pjpeg" && tipo != "image/gif" && tipo != "image/x-png")

message.Text = "Arquivo Inválido. Somente arquivos JPG GIF ou PNG são permitidos!";

else

{

string mainFile = Server.MapPath("~/Produtos/" + upload.FileName);

upload.SaveAs(mainFile);

 

string path = "Produtos/" + upload.FileName;

 

 

// cria outra imagem para garantir o RGB

string temp;

temp = mainFile + ".tmp";

System.Drawing.Image img = System.Drawing.Image.FromFile(mainFile);

int oW = Convert.ToInt32(img.PhysicalDimension.Width.ToString());

int oH = Convert.ToInt32(img.PhysicalDimension.Height.ToString());

int newWidth=oW;

int newHeight=oH;

 

if(oW > 200)

{

newWidth = 200;

newHeight = (oH * 200) / oW;

}

 

// cria nova copia da imagem em RGB com o maximo de 200px de largura.

System.Drawing.Image imgRGB = img.GetThumbnailImage(newWidth, newHeight, null, new System.IntPtr(0));

 

imgRGB.Save(temp, ImageFormat.Jpeg); // salva a nova imagem como .temp

img.Dispose(); // libera memoria

imgRGB.Dispose(); // libera memoria

File.Delete(mainFile); // exclui arquivo original

File.Copy(temp, mainFile); // copia arquivo temp como original

File.Delete(temp); // apaga arquivo temp

 

// atualiza base de dados

string sql = "UPDATE produtos SET imagem='" + path + "' WHERE produto_id=" + produto_id;

MySqlConnection con = new MySqlConnection(WebConfigurationManager.ConnectionStrings["JerodString"].ConnectionString);

MySqlCommand cmd = new MySqlCommand(sql, con);

cmd.CommandType = CommandType.Text;

using(con)

{

con.Open();

cmd.ExecuteNonQuery();

}

}

}

}

No FormView:

<asp:FormView ID="frmAdd" DefaultMode="Insert" DataSourceID="dsProdutos" HorizontalAlign="Center" runat="server" Visible="true">

 

no objeto datasource

<asp:ObjectDataSource ID="dsProdutos" TypeName="Jerod.Produtos" SelectMethod="Select" Runat="server"

InsertMethod="Save" OnInserted="grdProduto_Inserted"

UpdateMethod="Save" OnUpdated="grdProduto_Updated"

DeleteMethod="Delete" OnDeleted="grdProduto_Deleted">

<InsertParameters>

<asp:Parameter Name="produto_id" DefaultValue="0" Type="Int32" />

</InsertParameters>

 

<SelectParameters>

<asp:Parameter Name="produto_id" DefaultValue="0" Type="Int32" />

</SelectParameters>

</asp:ObjectDataSource>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.