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

klisman

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

16 mensagens neste tópico

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 :biggrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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";

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora