Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
klisman

Visual Studio 2008, Windows Form, ligação à BD

Recommended Posts

klisman

Boas pessoal,

Estou a fazer um programa em Visual Studio 2008, mais propriamente Windows Form. Surgiu-me agora um problema, não sei como inserir dados na BD.

Se imaginarmos que a BD se chama "bd_ola" e caso seja preciso, se encontra na pasta "c:\ola\", como faço para inserir dados? por exemplo DataGridView, por textBox+botão...qualquer forma serve, logo que dê para inserir :cheesygrin:

Share this post


Link to post
Share on other sites
anolsi

BD de que tipo? SQL Server, Access...


"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Share this post


Link to post
Share on other sites
klisman

BD de que tipo? SQL Server, Access...

MS SQL, estou a trabalhar com a BD que o Visual Studio trabalha

Share this post


Link to post
Share on other sites
Betovsky

Se for o MS Sql Server, não tem lógica estares a indicar a localização do ficheiro.

No momento que te ligas à BD tens de indicar a connectionstring. Vai ver a página http://www.connectionstrings.com/, é muito porreira.


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
klisman

Se for o MS Sql Server, não tem lógica estares a indicar a localização do ficheiro.

No momento que te ligas à BD tens de indicar a connectionstring. Vai ver a página http://www.connectionstrings.com/, é muito porreira.

Eu só coloquei a localização caso fosse preciso.

Por exemplo em .net(asp) há módulos por defeito, onde podemos inserir/editar/apagar. Aqui em Windows Form penso que isso não existe, pelo menos não descobri, vou tentar com aquela página que me mostraste.

Mas como já tenho uma connectionString não sei se me vai servir de algo. O que pretendia era o código que dá para ligar a BD de uma forma manual.

Share this post


Link to post
Share on other sites
Betovsky

Ahh compreendi mal então. O que tu quere é o ExecuteNonQuery().

Podes ver em http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx e dá também uma vista de olhos pelo resto da classe SqlCommand e as outras classes também relacionadas.


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
klisman

Ahh compreendi mal então. O que tu quere é o ExecuteNonQuery().

Podes ver em http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx e dá também uma vista de olhos pelo resto da classe SqlCommand e as outras classes também relacionadas.

estou a fazer um programa ao lado para ver se consigo gravar algo na bd, estou a fazer assim

private void button1_Click(object sender, EventArgs e)
        {
            
            String cs="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True";
            String comando="insert into pessoas values(10,'miguel');";
            CreateCommand(comando,cs);
        }

        private static void CreateCommand(string queryString,string connectionString)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                command.Connection.Open();
                command.ExecuteNonQuery();
            }
        }

Acham que é por aqui?Agora está me dar erro na connectionString sempre à frente das \, o erro é "Unrecognized escape sequence"

Share this post


Link to post
Share on other sites
Betovsky

Isso é porque o \ numa string serve para escapar o próximo char. Tipo o \n serve para indicar que é para mudar de linha. Tens 2 opções.

1 - Usa \\ em vez de \ , assim dizes que queres usar um \

2 - no inicio da string mete um @. Assim dizes que a tua string é para ser exactamente como escreveste.

s1 = "ola\\mundo";
s2 = @"ola\mundo";


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
klisman

Isso é porque o \ numa string serve para escapar o próximo char. Tipo o \n serve para indicar que é para mudar de linha. Tens 2 opções.

1 - Usa \\ em vez de \ , assim dizes que queres usar um \

2 - no inicio da string mete um @. Assim dizes que a tua string é para ser exactamente como escreveste.

s1 = "ola\\mundo";
s2 = @"ola\mundo";

já está consigo ter ligação com a BD. Mas agora surgiu outro problema e espero que seja o último.

Tenho numa tabela alguns dados inseridos à unha, numa opção que se chama "Show Table Data", inseri lá alguns dados.

Também tenho uma gridview que me mostra os dados dessa tal tabela.

Agora sempre que insiro ou apago algo da tabela a actualização aparece na GridView, mas sempre que vou à "Show Table Data" está tudo exactamente igual. Quando desligo o programa e corro de novo fica como se não tivesse feito nada... O que me parece é que ele faz o comando mas não faz o commit...que dizem?

Share this post


Link to post
Share on other sites
klisman

Continuo com o mesmo problema, consigo ver as alterações na GridView, mas no Show Table Data não aparecem as altereções e se eu reiniciar o Visual Studio as alterações que apareciam na GridView deixam de aparecer, mais uma vez parece me que é falta de confirmação da transacção, mas eu não posso usar commit; como comando directo pois dá me erro. O meu código é o seguinte:

connectionString="Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\Database1.mdf;Integrated Security=True;User Instance=True";

private static void CreateCommand(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command =connection.CreateCommand())
{
SqlTransaction transaction = null;

try
{
// BeginTransaction() Requires Open Connection
connection.Open();

transaction = connection.BeginTransaction();

// Assign Transaction to Command
command.Transaction = transaction;

// Execute 1st Command
command.CommandText = "insert into pessoas values('miguel');";
command.ExecuteNonQuery();

transaction.Commit();
}
catch
{
transaction.Rollback();
throw;
}
finally
{
connection.Close();
}
}
}
}

Alguém me pode ajudar? eu penso que este código já fazia o commit, mas afinal parece que nao Sad

Share this post


Link to post
Share on other sites
Betovsky

Que erro é que te dá quando fazes commit?


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
klisman

Que erro é que te dá quando fazes commit?

quando chega ao catch para fazer Roolback diz "Este Sql Transaction está concluído, já não pode ser usado". Mas se eu tira as duas linhas de código que estão dentro do catch, já não dá erro, mas acontece exactamente o mesmo, vejo as alterações na GridView, não na Show Table Data, reinicio o Visual Studio e as alterações foram-se...Isto é muito estranho, é algum pormenor que nos está a falhar, porque aparentemente ele faz o commit, mas na realidade as alterações não ficam gravadas permanentemente.

Share this post


Link to post
Share on other sites
Betovsky

Será que ao correres novamente o VS não está a sobrepor a bd?


"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Share this post


Link to post
Share on other sites
klisman

Será que ao correres novamente o VS não está a sobrepor a bd?

Acho que não, porque eu crio a Base de Dados, crio o código para inserir algo na Base de Dados, só para experimentar, não tenho mais nenhum código para mexer na Base de Dados, por isso o Visual Studio não deve mexer na BD.

Tu já gravaste dados para uma BD no VS? foi assim que fizeste? esta foi a única forma de gravar que encontrei na net, não sei se é a mais correcta...

Share this post


Link to post
Share on other sites
klisman

Consegui pessoal  :cheesygrin:

O que está mal é a connectionString.

A que coloquei foi esta:

string connectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\Visual Studio 2008\\Projects\\testedb\\testedb\\Database1.mdf;Integrated Security=True; Connect Timeout=30;User Instance=True";

pode colocar como resolvido

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.