1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

duvida visual c#

Discussão em 'Programação' iniciada por #treze, 23 de Maio de 2008. (Respostas: 11; Visualizações: 1297)

  1. Boas, o meu problema reside no facto de nao estar a conseguir inserir valores numa tabela de base de dados usando C#. A ligacao esta bem feita, pois funciona quando quero seleccionar algo da tabela, contudo nao consigo inserir nada.Aqui vai um pedaço de código que estou a usar e penso que esteja correcto:

    connection.Open();

    SqlCeCommand cmd = new SqlCeCommand("INSERT INTO nometabela(col1,col2,coln) VALUES (value1,value2,valuen)",connection);

    try
    {
    cmd.ExecuteNonQuery();
    }
    catch (System.Exception e)
    {
    Console.WriteLine(e.Message);
    }

    connection.Close();

    Quando faço o debug nenhuma excepção é lançada contudo nenhuma linha é inserida na tabela.
    Cumps.
     
  2. Quaker

    Quaker Power Member

  3. Pois, tambem ja tentei a inserção por parametros, mas a historia é a mesma, nenhuma excepção é lançada, quando faço "cmd.ExecuteNonQuery() " surge a informação de que uma row é retornada, contudo nenhuma linha é inserida na tabela. Junto aqui uma parte do código que estou a utilizar pois de certeza que algo não está bem.

    try
    {
    conn.Open();

    SqlCeCommand cmd = new SqlCeCommand("INSERT INTO grafo(origem,destino,ligacao,portagem,distancia) VALUES (?,?,?,?,?)", conn);

    SqlCeParameter p1 = new SqlCeParameter("@origem", SqlDbType.NVarChar, 100);
    p1.Value = textBox1.Text;
    SqlCeParameter p2 = new SqlCeParameter("@destino", SqlDbType.NVarChar, 100);
    p2.Value = textBox2.Text;
    SqlCeParameter p3 = new SqlCeParameter("@ligacao", SqlDbType.NVarChar, 100);
    p3.Value = textBox3.Text;
    SqlCeParameter p4 = new SqlCeParameter("@portagem", SqlDbType.Real, 100);
    p4.Value = float.Parse(textBox4.Text);
    SqlCeParameter p5 = new SqlCeParameter("@distancia", SqlDbType.Real, 100);
    p5.Value = float.Parse(textBox5.Text);

    cmd.Parameters.Add(p1);
    cmd.Parameters.Add(p2);
    cmd.Parameters.Add(p3);
    cmd.Parameters.Add(p4);
    cmd.Parameters.Add(p5);

    aux=cmd.ExecuteNonQuery();
    MessageBox.Show(aux.ToString());
    conn.Close();
    }
    catch (System.Exception f)
    {
    Console.WriteLine(f.Message);

    }

    De qualquer forma obrigado pela ajuda!!
    Cumps
     
  4. SoundSurfer

    SoundSurfer Power Member

    "... VALUES (?,?,?,?,?)", conn); " -> VALUES (@origem,@destino,@ligacao,@portagem,@distancia)", conn);
     
  5. Já corrigi essa parte mas continuo a nao obter resultados. Nao ha mudanças na minha tabela "grafo".
    Este código esta associado a um botao k quando é pressionado adicionaria uma linha á tabela, o que nao acontece.Sinceramente nao estou a perceber onde está o erro.
    De qualquer forma obrigado pela ajuda.
     
  6. teclahost.com

    teclahost.com Suspenso

    Olá, existem diferentes formas de poderes fazer o insert de registos numa determinada tabela de uma base de dados.
    Se usas a última versão da framework 2.0 ou 3.5, sugiro que uses os datasets, que simplificam em muito o teu trabalho.

    No entanto, aqui fica o exemplo de um insert simples e tradicional :
    //Considerando que tens a connection string criada no web.config
    private static string _Conn = ConfigurationManager.ConnectionStrings["BD"].ConnectionString;
    protected void btxpto_Click(object sender, EventArgs e)
    {
    SqlConnection conn = new SqlConnection(_Conn);
    string SQLInsert = null;

    SQLInsert = "INSERT INTO tabela(campo1) VALUES (@valorcampo1)";

    SqlCommand command = new SqlCommand(SQLInsert, conn);

    command.Parameters.Add(new SqlParameter("@valorcampo1", textbox1.text));

    try
    {
    conn.Open();
    int result = command.ExecuteNonQuery();

    if (result > 0)
    {
    //Correu td bem!
    }
    }

    catch (Exception ex)
    {
    Response.Write(ex.message); //entra aqui se der erro, e escreve no ecrã.
    throw;

    }

    }

    Abraço
     
    Última edição pelo moderador: 24 de Maio de 2008
  7. Boas de novo
    pois, também ja experimentei dessa forma e nada na mesma. O problema é que não é lançada nenhuma excepção o que significa que teoricamente iria resultar. Já agora, nunca me consegui ligar com um "SqlCommand" do "System.Data.SqlClient", tenho necessariamente de usar o "SqlCeCommand" do "System.Data.SqlServerCe". Usando o primeira é lançado uma excepção :

    "When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)".

    Gostaria de saber mais formas de poder actualizar,inserir e remover dados de tabelas, uma vez que desta forma não está facil.

    Cumprimentos aos demais e obrigado pela ajuda
     
  8. |pr3t3nd3r|

    |pr3t3nd3r| Power Member

    verifica nas definições do sql se tens definido para windows authentication ou se tens para windows e sql authentication, penso que seja disso...
     
  9. teclahost.com

    teclahost.com Suspenso

    Esse problema em nada tem a ver com o código que aprentas, bem como a solução que te sugeri. Conforme o erro diz, a instancia de SQL que estás a usar não permite remote connections.

    Para permitires isso, terás que fazer :
    - Ir a SQL SERVER 2005 SURFACE AREA CONFIGURATION
    - Clica em Surface Area Configuration for Services and Connections
    - Após abrir uma nova janela, vai a [tua instancia]\Database Engine\ e selecciona Remote Connections, no lado direito, escolhe LOCAL AND REMOTE CONNECTIONS, e USING BOTH TCP/IP and named pipes.

    Faz um restart ao serviço de sql server, e deverá funcionar correctamente apartir de agora.
     
    Última edição pelo moderador: 24 de Maio de 2008
  10. boas de novo pessoal..
    Cá estou eu outra vez com o mesmo problema, já fiz exactamente o que disses-te teclahost,contudo continuo a ter os mesmos resultados. Já fiz todas as alterações bem como o restart ao sql server.
    É de facto muito estranho, pois o código teoricamente está correcto, mas nenhuma linha é adicionada embora o cmd.ExecuteReader() retorne sempre um valor maior que zero.
    Entretanto gostaria de saber maneiras alternativas de inserir modificar dados em tabelas uma vez que este método não está a dar os devidos frutos.

    Cumprimentos e agradecimentos ao pessoal

    Era só para acrescentar um pormenor: na tentativa de criar uma tabela usando o mesmo método que estou a "tentar" usar para inserir dados nas tabelas, igualmente nenhuma tabela apareceu na pasta Tables no Server Explorer. Encerrei o o visual studio, iniciei novamente e ao tentar criar uma tabela com o mesmo nome uma excepcção foi lançada avisando que já existia uma tabela com esse nome!!! Uma vez que a tabela em questão não aparecia representada no Server Explorer gostaria de saber o que se passa!! Onde é que a tabela está a ser criada??
    Não sei se isto estará relacionado com o meu problema mas pareceu-me pertinente mencionar.

    Mais uma vez obrigado e cumprimentos a todos
     
    Última edição pelo moderador: 25 de Maio de 2008
  11. LaNgSuYaR

    LaNgSuYaR Power Member

    Boas, há dois factores que te podem condicionar todas essas inserções!

    Quando fazes um build, ou seja, compilas a tua aplicação, o visual studio cria uma cópia da tua BD para a pasta resultante da build.
    Ora, se nas definições da tua BD não tiveres marcada a opção "Copy if newer", a BD do teu projecto será sempre a mesma.
    Por outro lado, e se tiveres essa propriedade marcada, de cada vez que a aplicação não termina adequadamente ( ocorrendo um crash ou mesmo se tu fizeres stop ao debugging ) a BD não é copiada para o teu projecto e ficarás com a BD anterior, sem alterações portanto.

    Quanto a esse teu último pormenor penso que não te sei responder sem dar uma olhadela a isso. No entanto, se em vez de Server Explorer for no painel Data Sources, isso é perfeitamente normal que aconteça pois essas Data Sources têm que ser actualizadas de cada vez que fazes uma modificação na estrutura da tua BD.

    Espero ter ajudado!
    Abraço!
     
  12. OoO

    OoO

    estou com o mesmo problema.
     

Partilhar esta Página