Avatar billede pablopablo Nybegynder
04. august 2008 - 02:50 Der er 14 kommentarer og
1 løsning

Valg af statistik modul

Hejsa...

Jeg ønsker at integrere et statistik modul i min site...og har bl.a. kigget på AW stat. Det ser dog lidt kompliceret ud at installere...?

Kan I anbefale dette tool, eller måske noget andet? som fx. er lettere at installere? :)

Håber meget I kan hjælpe mig!

Mvh. PabloPablo
Avatar billede arne_v Ekspert
04. august 2008 - 02:55 #1
Du mener en log analyzer ?

For 12-13 år siden brugte jeg Analog http://www.analog.cx/ - det var ret nemt at bruge
efter min mening.

Hverken AWStat eller Analog er iøvrigt ASP.NET specifik.
Avatar billede pablopablo Nybegynder
06. august 2008 - 22:06 #2
Hej Arne...jeg har bedt vores hosting selvskab om at sætte AW Stats op for os, det tror jeg pt. er givet godt ud, idet at jeg selv er fuldt beskæftiget...

Nu hvor jeg har dig...findes der så et program som kan tage en backup af en MS SWL database, ved at traverere alle tabeller og så generere en fil...eller måske bare skriver alt over i en anden databasen...og samtidig den anden vej igen...

Sprøger pga. vores hosting selvskab tager 1000kr for at lave en backup af vores db, eller blot at indlæse en backup...hvilket jeg synes er liiige lovligt meget!!
Håber du har en billigere løsning ;)
Avatar billede arne_v Ekspert
07. august 2008 - 04:11 #3
Hvis du har mulighed for at fyre SQL af mod databasen og adgang til at hente med FTP
fra serveren som kører databasen, så kan du vel selv lave en backup og hente den.

Ellers skal du nok selv til at lave noget. Det må være overkommeligt at kode.
Avatar billede pablopablo Nybegynder
07. august 2008 - 12:42 #4
Jeg kan sagtens udføre SQL mod databasen, men jeg har ikke adgang til serveren via FTP desværre, det er en selvstædig server som udelukkede står for databaser...

Kan du vise mig koden til at tage en komplet backup af en db/alle tabeller, samt gendanne den igen, vis man har fået lagt en kopi ind i en anden database på en anden server?
Avatar billede arne_v Ekspert
08. august 2008 - 04:06 #5
Grundliggende er det jo bare:

for alle databaser
  for alle tabeller
    for alle raekker
        for alle kollonner
          write

Jeg kan bixe noget kode senere, hvis du gerne vil se noget konkret.
Avatar billede pablopablo Nybegynder
08. august 2008 - 09:59 #6
det vil jeg meget gerne! :-)
Avatar billede arne_v Ekspert
11. august 2008 - 03:06 #7
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;

namespace E
{
    public class DbDump
    {
        public static void DumpTbl(IDbConnection con, string db, string tbl)
        {
            IDbCommand cmd = con.CreateCommand();
            cmd.CommandText = "USE " + db;
            cmd.ExecuteNonQuery();
            cmd.CommandText = "SELECT * FROM " + tbl;
            List<string> alltbl = new List<string>();
            IDataReader rdr = cmd.ExecuteReader();
            while(rdr.Read())
            {
                Console.Write("INSERT INTO " + tbl + " VALUES(");
                for(int i = 0; i < rdr.FieldCount; i++)
                {
                    if(i > 0) Console.Write(",");
                    object o = rdr[i];
                    if(o is DBNull)
                    {
                        Console.Write("NULL");
                    }
                    else if(o is int
                            || o is long
                            || o is float
                            || o is double
                            || o is decimal)
                    {
                        Console.Write(o);
                    }
                    else if(o is string)
                    {
                        Console.Write("'" + o.ToString().Replace("'", "''") + "'");
                    }
                    else
                    {
                        throw new ApplicationException("Unsupported data type");
                    }
                }
                Console.WriteLine(");");
            }
            rdr.Close();
        }
        public static void DumpDb(IDbConnection con, string db, string dbname)
        {
            Console.WriteLine("USE " + db + ";");
            IDbCommand cmd = con.CreateCommand();
            cmd.CommandText = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_" + dbname + "='" + db + "' AND TABLE_TYPE='BASE TABLE'";
            List<string> alltbl = new List<string>();
            IDataReader rdr = cmd.ExecuteReader();
            while(rdr.Read())
            {
                alltbl.Add((string)rdr[0]);
            }
            rdr.Close();
            foreach(string tbl in alltbl)
            {
                DumpTbl(con, db, tbl);
            }
        }
        public static void Dump(IDbConnection con, string dbname)
        {
            IDbCommand cmd = con.CreateCommand();
            cmd.CommandText = "SELECT DISTINCT TABLE_" + dbname + " FROM INFORMATION_SCHEMA.TABLES";
            List<string> alldb = new List<string>();
            IDataReader rdr = cmd.ExecuteReader();
            while(rdr.Read())
            {
                string db = (string)rdr[0];
                if(!db.StartsWith("sys") && !db.Equals("mysql"))
                {
                    alldb.Add(db);
                }
            }
            rdr.Close();
            foreach(string db in alldb)
            {
                DumpDb(con, db, dbname);
            }
        }
        public static void Dump(string provider, string constr, string dbname)
        {
            DbProviderFactory dbf = DbProviderFactories.GetFactory(provider);
            using(IDbConnection con = dbf.CreateConnection())
            {
                con.ConnectionString = constr;
                con.Open();
                Dump(con, dbname);
            }
        }
    }
    public class Program
    {
        public static void Main(string[] args)
        {
            DbDump.Dump("System.Data.SqlClient", @"Server=ARNEPC3\SQLEXPRESS;Integrated Security=SSPI;Database=Test", "CATALOG");
            DbDump.Dump("MySql.Data.MySqlClient", "Data Source=localhost;Database=Test;User Id=root;Password=", "SCHEMA");
        }
    }
}
Avatar billede arne_v Ekspert
11. august 2008 - 03:07 #8
Du må selv tilføje de manglende data typer.

Jeg lavede det nærmest ikke database specifikt for sjovs skyld.
Avatar billede pablopablo Nybegynder
11. august 2008 - 11:40 #9
Hej Arne! Hold da op...det var meget kode :o)

Kan jeg få dig til at skrive en enkelt linie om hver metode, hvad de gør? Bare så jeg er helt med på det hele...
Avatar billede arne_v Ekspert
12. august 2008 - 01:18 #10
// dump 1 tabel
public static void DumpTbl(IDbConnection con, string db, string tbl)

// dump 1 database = mange tabeller
public static void DumpDb(IDbConnection con, string db, string dbname)

// dump 1 server = mange databaser
public static void Dump(IDbConnection con, string dbname)

// dump 1 server (inden connection åbnes)
public static void Dump(string provider, string constr, string dbname)
Avatar billede arne_v Ekspert
12. august 2008 - 01:20 #11
Der mangler også en vigtig kommentar:

// dirty hack til at undgå diverse tabeller:
//    sysxxxx i SQLServer
//    mysql i MySQL
// tabeller som matcher disse vil *IKKE* blive dumpet
if(!db.StartsWith("sys") && !db.Equals("mysql"))
Avatar billede pablopablo Nybegynder
12. august 2008 - 02:14 #12
Det er lidt sent...men dump sletter jo data...? Jeg spurgte om hvordan jeg tager en komplet backup af en database og gendanne den igen...? e det mig som ikke lige er med eller...?
Avatar billede arne_v Ekspert
12. august 2008 - 02:19 #13
Den sletter ingen data men outputter SQL statements (til Console.Out men det kan jo ændres)
som kan bruges til at loade data ind i en ny database.
Avatar billede arne_v Ekspert
29. august 2008 - 03:03 #14
all set ?
Avatar billede arne_v Ekspert
28. oktober 2008 - 02:37 #15
?
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