[ATENÇÃO] Duvida em .NET 2005 Express C# relativo ao uso de BDs em SQL Server

rvaladas

Membro
Olá, estou a fazer uma aplicação em .NET 2005 Express C# que usa uma base de dados em SQL server.
Em .NET 2005 a ligação á base de dados é feita toda automaticamente, ou seja, através do database Explorer basta adicionar uma nova connection e escolher a minha base de dados e a parir daí tenho acesso ao dataset que ele cria automaticamente e ao TableAdapters que ele cria automaticamente.

Consigo aceder á base de dados e efectuar consultas, como por exemplo:

Código:
RemoBDDataSet.UtilizadorDataTable user;
user = new RemoBDDataSet.UtilizadorDataTable();
            this.utilizadorTableAdapter1.Fill(user);
            int c = user.Rows.Count;

            for (int s = 0; s < c; s++)
            {
                string nomes = user[s].Nome;
                this.listBox2.Items.Add(nomes);}
basta este codigo para mostrar todos os nomes (campo Nome) da tabela Utilizador da minha base de dados SQL Server


A minha duvida é como gravar directamente na base de dados um novo registo.

Como por exemplo, como inserir directamente na BD uma nova Row na tabela Utilizador??

Isto porque ja tou farto de tentar e consigo inserir no Table Adapter e dataset mas fica em memoria so, ou seja, não chega a gravar directamente no ficheiro e cada vez que se sai do programa e volta a entrar a base de dados não tem as novas alterações.

Agradecia ajuda com isto

Cumprimentos
Rui
 
Última edição:
Olá, estou a fazer uma aplicação em .NET 2005 Express C# que usa uma base de dados em SQL server.
Em .NET 2005 a ligação á base de dados é feita toda automaticamente, ou seja, através do database Explorer basta adicionar uma nova connection e escolher a minha base de dados e a parir daí tenho acesso ao dataset que ele cria automaticamente e ao TableAdapters que ele cria automaticamente.

Consigo aceder á base de dados e efectuar consultas, como por exemplo:

Código:
RemoBDDataSet.UtilizadorDataTable user;
user = new RemoBDDataSet.UtilizadorDataTable();
            this.utilizadorTableAdapter1.Fill(user);
            int c = user.Rows.Count;

            for (int s = 0; s < c; s++)
            {
                string nomes = user[s].Nome;
                this.listBox2.Items.Add(nomes);}
basta este codigo para mostrar todos os nomes (campo Nome) da tabela Utilizador da minha base de dados SQL Server


A minha duvida é como gravar directamente na base de dados um novo registo.

Como por exemplo, como inserir directamente na BD uma nova Row na tabela Utilizador??

Isto porque ja tou farto de tentar e consigo inserir no Table Adapter e dataset mas fica em memoria so, ou seja, não chega a gravar directamente no ficheiro e cada vez que se sai do programa e volta a entrar a base de dados não tem as novas alterações.

Agradecia ajuda com isto

Cumprimentos
Rui

bom, eu fazia o update à mão, o update por default não é nada performante....

mas podes chamar o update do dataAdapter, no teu caso utilizadorTableAdapter1.Update(...)

podes passar o dataset, datarow, datatable, etc..
 
bom, eu fazia o update à mão, o update por default não é nada performante....

mas podes chamar o update do dataAdapter, no teu caso utilizadorTableAdapter1.Update(...)

podes passar o dataset, datarow, datatable, etc..


pois... eu não sei se me falta alguma coisa mas o facto é que com o codigo:

Código:
RemoBDDataSet ds = new RemoBDDataSet();

 RemoBDDataSet.UtilizadorRow ur = this.ds.Utilizador.NewUtilizadorRow();
            ur.ID_Biometrica = "5.bir";
            ur.Nome = "Manel";
            ur.Idade = 30;
            ur.Admin = false;
            ur.ID_Perfil = 1;

            ds.Utilizador.AddUtilizadorRow(ur);

this.utilizadorTableAdapter1.Update(ds);
ou até mesmo so com esta linha:

Código:
this.utilizadorTableAdapter1.Insert("23.bio", "Manel", 30, false, 1);
se eu faço uma consulta depois disto ele mostra tudo como se tivesse inserido na BD, mas o k é certo é que se eu fechar o programa e voltar a abrir ele nao guardou alterações nenhumas no ficheiro da base de dados, ou seja, ficou tudo so na memoria.
 
Épa descobri o problema.
Chiça é uma coisa que não tem nada a ver com código e pelos vistos ja centenas de pessoas o tiveram.

O código todo que pus atrás está bem, o que se passa é que quando faço um build os ficheiros do project folder são copiados para o output folder por cima dos outros que la existiam.
O programa grava tudo bem na base de dados que está na directoria de output quando está a correr, mas quando fechamos o programa e voltamos a correr, essa base de dados na pasta de output é substituida pela outra da directoria do project que nao tem as alterações que tinha feito e portanto parece que nao está a guardar nada na base de dados. >(>(>(

A solução para isto é seleccionar o base de dados no Solution Explorer -> Properties -> onde diz Copy To Output Directory e que tem Copy Always por default, é so trocar por Copy If Newer.
E fica tudo a trabalhar.

Outra solução é não guardar a base de dados na directoria do projecto que assim ele usa sempre a mesma base de dados.

Aqui está o link onde vi a explicação no forum do MSDN:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=159772&SiteID=1

Hi,

This is a blog about working with Local Data File: https://blogs.msdn.com/smartclientdata/archive/2005/08/26/456886.aspx. Quoting from this blog

Where is my data? -- Understanding the file copy for desktop projects
One of the things to know when working with local database files is that they are treated as any other content files. For desktop projects, it means that by default, the database file will be copied to the output folder (aka bin) each time the project is built.

It is possible that when you hit F5 again after saving the data, the Northwind.MDF file under bin was replaced with the original one and your change was lost. Would you please verify if this is the case and follow the work around in the blog to fix the issue?

1. If you select local database file in the Solution Explorer window, you will see a property called ‘Copy to Output’ in the Properties window. By default it is set to ‘Copy Always’ which means that on each build, the data files in the project folder will be copied to the output folder overwriting the existing data files if any. You can set this property to Copy Never and then manually put a copy of the data file in the output folder. This way, on subsequent builds, the project system will leave the datafile in the output folder and not try to overwrite it with the one from the project. The downside is that you still have two copies so after you modify the database file using the app, if you want to work on those changes in the project, you need to copy it to the project manually and vise-versa.
2. You can leave the data file outside the project and create a connection to it in Database Explorer. When the IDE asks you to bring the file into the project, just say no. This way, both the design-time and the run-time will be using the same data file but the downside is that the path in the connection string will be hard coded and therefore it’ll be harder to share the project and deploy the app. Before deploying the app, just make sure to replace the full path in the settings with a relative path.

Best regards,




E eu todo chateado por andar á 3 dias de volta disto sem resultados.

Cumprimentos e obrigado pela ajuda

Rui
 
Por que nao usas uma instancia do sql Server 2005 express , podes tirar gratis e ainda tens uma ferramenta tipo enterprise manager do sql server 2000.

Alguma coisa pm , []'s
 
Por que nao usas uma instancia do sql Server 2005 express , podes tirar gratis e ainda tens uma ferramenta tipo enterprise manager do sql server 2000.

Alguma coisa pm , []'s

Eu não expliquei bem mas eu tou a usar o SQL Server 2005 Express, a base de dados foi feita com Enterprise manager do 2005. :)

Mas bastou fazer as alterações que referi atrás pra o programa ficar todo a trabalhar.

Isto com o Express basta uma linha de codigo para guardar registos na base de dados :x2:.

Ele faz o resto das cenas tudo automaticamente.
 
Por que nao usas uma instancia do sql Server 2005 express , podes tirar gratis e ainda tens uma ferramenta tipo enterprise manager do sql server 2000.

Alguma coisa pm , []'s

ele tá a usar o express :) o problema era mesmo esse o ficheiro da BD estava a ser copiado por cima no output...
 
E eu expliquei-me mal :P

Eu uso em vb.net 2005 a class sqlclient e nunca me aconteceu esse problema, por isso e que estava achar estranho.

Ja vi estas a ussar o database explorer, por isso e que eu nunca tive problemas.

Cumps
 
Última edição:
Back
Topo