Avatar billede trenskow Nybegynder
24. juli 2005 - 23:59 Der er 15 kommentarer og
1 løsning

Hjælp til sqlStatement (den gemmer ikke)

Hejsa allesammen

Jeg smider lige min kode her, da jeg har lidt problemer. Jeg beder den om at gemme i databasen, men efter koden er kørt, så er der intet gemt i db.

private void connectTemp()
        {
            myConTemp = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\tempTourney.mdf;Integrated Security=True;User Instance=True");
            try
            {
                myConTemp.Open();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
        private void closeTemp()
        {
            try
            {
                myConTemp.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }

        public void writeAbsoTemp(ArrayList list)
        {
            connectTemp();
            foreach(AbsolutePoker ap in list)
            {
                String sql = "INSERT INTO Absolute (Day, Time, Buy, Type, Game) VALUES " +
                    "(" + ap.getDay() + ", N'" + ap.getTime() + "', '" + ap.getBuy() +
                    "', N'" + ap.getType() + "', N'" + ap.getGame() +"')";
                SqlCommand myCommand = new SqlCommand(sql, myConTemp);
                myCommand.ExecuteNonQuery();
            }
            closeTemp();
        }
--------------------------------------------

Jeg får ingen fejl når jeg kører koden, og den kører igenne foreach nogle og 500 gange.

Hvad gør jeg dog galt?
Avatar billede arne_v Ekspert
25. juli 2005 - 00:02 #1
hvad felt type er de 5 felter ?
Avatar billede trenskow Nybegynder
25. juli 2005 - 00:04 #2
de er int, nchar, varchar, nvarchar, nvarchar

getDay() returnerer en int, resten returnerer en String

Skal for god ordens skyld sige det er i VS2005 B2 (ved ikke om det gør en forskel)
Avatar billede arne_v Ekspert
25. juli 2005 - 00:06 #3
og du får ingen exception ?
Avatar billede trenskow Nybegynder
25. juli 2005 - 00:14 #4
Nope... har lige kørt koden igennem en gang til, for at være sikker.
Når jeg har kørt kode, så inde i "Server Explorer", højre klikke på tabellen, og vælger "Show table data", og der er der slet ikke skrevet noget ind.
Avatar billede trenskow Nybegynder
25. juli 2005 - 00:36 #5
Ingen ?

Jeg har lige prøvet med lidt fejlfinding.
Og, når jeg eks prøver at gemme en værdi i et fejl som er primær nøgle, så får jeg stadig ingen exception. Skulle jeg ikke det?
Avatar billede trenskow Nybegynder
25. juli 2005 - 00:36 #6
felt.. ikke fejl
Avatar billede trenskow Nybegynder
25. juli 2005 - 01:17 #7
Ok.
Jeg laver en eller anden fejl, men kan ikke finde den. Så jeg har startet et nyt mini projekt for at finde ud af det, men det hjalp mig ikke, så her er en gennemgang af hvad jeg har gjort, og så kan jeg få alle fejlene at vide :-)
Starter et nyt projekt. Vælger "Add new item", vælger SQL Database. Så  laver jeg en tabel i databasen
http://trenskow.dk/images/tabel2.jpg

Så Finder jeg connection String til DB, og kommer frem til denne her
Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True

Herefter laver jeg min kode, som ser sådan her ud
Avatar billede trenskow Nybegynder
25. juli 2005 - 01:17 #8
(kom til at trykke send, resten kommer her)

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;

namespace TestApplication2
{
    public class DbHandler
    {
        private SqlConnection myConnection;
        private String ConnString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True";
        public DbHandler()
        {
        }
        private void OpenDB()
        {
            myConnection = new SqlConnection(ConnString);
            try
            {
                myConnection.Open();
            }
            catch(Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
        private void CloseDB()
        {
            try
            {
                myConnection.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
        public void InsertDB()
        {
            OpenDB();
            String sqlCommand = @"INSERT INTO Table2 (test, test1, test2, test3) VALUES (N'tewt', N'test', N'test', N'test')";
            SqlCommand myCommand = new SqlCommand(sqlCommand, myConnection);
            myCommand.ExecuteNonQuery();
            CloseDB();
        }
    }
}
Avatar billede trenskow Nybegynder
25. juli 2005 - 21:30 #9
Jeg har prøvet at smide en try/catch omkring
OpenDB();
            String sqlCommand = @"INSERT INTO Table2 (test, test1, test2, test3) VALUES (N'tewt', N'test', N'test', N'test')";
            SqlCommand myCommand = new SqlCommand(sqlCommand, myConnection);
            myCommand.ExecuteNonQuery();
            CloseDB();

Men den kaster ingenting af sig, og koden kører stadig uden fejl, men intet bliver skrevet i databaseb
Avatar billede nielle Nybegynder
25. juli 2005 - 21:39 #10
Hvad er det egentligt du vil have lagt i databasen med denne SQL:

String sqlCommand = @"INSERT INTO Table2 (test, test1, test2, test3) VALUES (N'tewt', N'test', N'test', N'test')";

Den ser nemlig temmelig mystisk ud for mig. Hvad laver N'erne foran?
Avatar billede trenskow Nybegynder
25. juli 2005 - 21:56 #11
-> Nielle

Det er  i vs 2005. Det er et ganske lille testkode for at finde min fejl, men N skulle være god nok.
feks
'test' kan være en VarChar
men N'test' kan være en NvarChar
Hvad forskellen er, har jeg ikke lige læst mig frem til endnu :-)
Avatar billede trenskow Nybegynder
25. juli 2005 - 21:57 #12
Men når alt kommer til alt, så har jeg fundet fejlen, og endnu en gang er det en noob fejl, som har fået mig til at gå i stå i 2 dage.
Denne linie
private SqlConnection myConnection;
skal være
private SqlConnection myConnection = new SqlConnection();
Avatar billede nielle Nybegynder
25. juli 2005 - 22:01 #13
Det brude da ellers have givet dig en NullPointer exception...
Avatar billede arne_v Ekspert
25. juli 2005 - 22:10 #14
foruden at OpenDB burde sætte den !?
Avatar billede trenskow Nybegynder
25. juli 2005 - 22:48 #15
nielle og arne:
Enig, men ved ikke om det muligvis er en bug i vs2005 beta 2.
Jeg skulle måske reportere den tilbage til ms
Avatar billede prec Nybegynder
29. juli 2005 - 23:59 #16
Du bør overveje at bruge parameters, så slipper du for mange af de problemer, et eksempel:

cmd.CommandText = "INSERT INTO table (col1, col2) VALUES (@val1, @val2)";
cmd.Parameters.Add("@val1", SqlDbType.NVarChar).Value = "værdi";
cmd.Parameters.Add("@val2", SqlDbType.NVarChar).Value = "værdi";

osv.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester