Avatar billede mortvader Nybegynder
13. maj 2011 - 11:59 Der er 9 kommentarer og
1 løsning

Opdatering af SQL felter enkeltvis via variabel

Hej, jeg er helt ny i C#, så her kommer mit første dumme spørgsmål:

Hvordan opdaterer man felterne i en SQL record enkeltvis?

Eksempel fra Delphi, hvor jeg har lavet noget lignende:

ds.edit;
ds.fieldbyname(fldname[x]).asstring:=myval;
ds.post; 

Hvordan kan man gøre tilsvarende i C#?
Avatar billede arne_v Ekspert
13. maj 2011 - 13:50 #1
I .NET kan du lave noget tilsvarende med DataSet.

Du kan lave noget naesten tilsvarende med en ORM som LINQtoSQL, EF, NHibernate.

Eller du kan lave noget helt anderledes og bare bruge en Command med en UPDATE.
Avatar billede arne_v Ekspert
13. maj 2011 - 13:54 #2
Kode snippet:

// data ind
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Databases\MSAccess\Test.mdb;");
con.Open();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT f1,f2 FROM t1", con);
DataSet ds = new DataSet();
da.Fill(ds, "t1");

// opdater data

// data tilbage
da.Update(ds, "T1");
ds.AcceptChanges();
Avatar billede mortvader Nybegynder
13. maj 2011 - 14:50 #3
Det her ser spændende ud:

con.Open();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT f1,f2 FROM t1", con);
DataSet ds = new DataSet();
da.Fill(ds, "t1");

// opdater data

Men lige nøjagtig HER, hvordan refererer jeg til de enkelte felter (med feltnavne fra en variabel)?


// data tilbage
da.Update(ds, "T1");
ds.AcceptChanges();
Avatar billede arne_v Ekspert
13. maj 2011 - 15:02 #4
ds.Tables[tabelnavn].Rows[raekkenummer][kolonnenavn]
Avatar billede arne_v Ekspert
13. maj 2011 - 15:03 #5
Bemaerk at dette er med et saakaldt untyped DataSet.

Man kan ogsaa faa Visual Studio til at generere et typed DataSet.
Avatar billede mortvader Nybegynder
13. maj 2011 - 15:05 #6
Nice!

Tak Arne, husk at lægge svar.

God weekend!
Avatar billede arne_v Ekspert
13. maj 2011 - 15:06 #7
svar
Avatar billede arne_v Ekspert
13. maj 2011 - 15:07 #8
Bemaerk at untyped DataSet er ved at vaere en gammel ting i .NET (det var nyeste maade i 2002-2005).

Men det er det som matcher den Delphi snippet bedst.
Avatar billede mortvader Nybegynder
13. maj 2011 - 15:13 #9
Ja ok. Hvordan ville du løbe igennem en række feltnavne og værdier, og opdatere en record med de feltnavne og værdier der gives?

Jeg synes det er lidt kluntet at opbygge en commandstring, men det er måske mere "rigtigt"?

Eller er der en 3. bedre måde?
Avatar billede arne_v Ekspert
13. maj 2011 - 15:23 #10
Det nyeste idag er at bruge ORM.

Jeg foretraekker NHibernate.

Demo:

data klasse

    public class T1
    {
        public virtual int F1 { get; set; }
        public virtual string F2 { get; set; }
    }

mapping

    <class name="E.T1, Test" table="t1">
        <id name="F1">
            <column name="f1"/>
        </id>
        <property name="F2">
            <column name="f2"/>
        </property>
    </class>

brug:

            ISessionFactory sf = cfg.BuildSessionFactory();
            using(ISession s = sf.OpenSession())
            {
                T1 r = (T1)s.Load(typeof(T1), primkeyval);
                r.F2 = "XXXX";
            }
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