Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Skapa en class

Postades av 2007-07-03 19:01:14 - Jens Löwerroot, i forum c# (c-sharp), Tråden har 4 Kommentarer och lästs av 954 personer

Hej!
Det är som så att jag sitter och försöker bygga en databasclass i C# som ska kopplas ihop med en mysql databas. Saken är den att jag har kört fast, stenfast. På en vanlig sida för att lägga till lite information kan man t.ex. skriva såhär.

MySqlConnection cnn = new MySqlConnection();
        try
        {
            cnn.ConnectionString = strCon;
            //Parametrar
            MySqlParameter subject = new MySqlParameter("subject", txtSubject.Text);
            MySqlParameter news = new MySqlParameter("news", txtNews.Text);
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = cnn;
            cmd.CommandText = "INSERT INTO test_news (subject, news) " +
                              "VALUES (?subject, ?news)";
            cmd.Parameters.Add(subject);
            cmd.Parameters.Add(news);
            cnn.Open();
            cmd.ExecuteNonQuery();
        }
        catch (MySqlException ex)
        {
            Response.Write( "Något gick fel (" + ex.Message + ")");
        }
        finally
        {
            cnn.Close();
        }

Saken är den att jag vill kunna skicka in obegränsat med parametrar till min class.
Jag hittade den har artikeln här på pellesoft, det verkar vara något liknande det jag är ute efter http://www.pellesoft.se/area/articles/article.aspx?artid=973
Dock så förstår jag inte allt riktigt, vart t.ex. har han sin CommandText där han i sitt fall ska köra en SELECT sats?
Jag skulle uppskatta om någon kunde hjälpa mig att få det här att fungera. Visa hur man kan dela upp koden som jag visade och visa hur man använder sig utav classen ute på vanliga sidan.
Säg att man t.ex. har gjort en egen metod utav Parametersatsen i classen
public void MakeParameter()
{
   // Skapa parametrar utifrån de som sparats i kollektionen 
  for (int i = 0; i < collection.Count; i++)
  {
    mySqlCmd.Parameters.Add(collection[i].Name.ToString(), collection[i].type).Value = collection[i].Value.ToString();
  }
}


Och då visa hur jag skriver på min vanlig sidan (ex. Default.aspx.cs)
För att lägga till mina parametrar i den metoden. Ja visa hur det här fungerar som sagt för jag har kört fast och behöver få se hur det här fungerar.
Hoppas att ni förstår vad jag är ute efter, fråga annars.
Hjälpa mig med att bygga en metod i classen som antingen lägger till eller skriver ut information så att jag ser hur det funkar, får man se en del så förstår man ska bygga vidare med resten.


Svara

Sv: Skapa en class

Postades av 2007-07-05 00:28:00 - Magnus Bergström

I exemplet används en lagrad procedur, medan du manuellt slänger in SQL-satsen.

Är det tänkt att du ska ha en metod som sköter alla dina databasanrop eller ska du bara köra mot en och samma tabell med 0-n parametrar?

Det enklaste sättet är att göra som i exemplet, genom att ha som inparameter någon form av collection. Du kan egentligen använda vad du vill: ArrayList, Hashtable, List<>.

Väldigt förenklat exempel:

public static void DatabaseCall(ArrayList parameters)
{
 MySqlConnection cnn = new MySqlConnection();
 MySqlCommand cmd = new MySqlCommand();
 cmd.Connection = cnn;
 
 string strParaName = "";
 string strParaVal = "";

 foreach (Parameter p in parameters)
 {
  cmd.Parameters.Add(new MySqlParameter(p.Name, p.Value)
  strParaName = strParaName + "," + p.Name;
  strParaVal = strParaVal + ",?" + p.Name;
 }

 cmd.CommandText = "INSERT INTO test_news (" + strParaName + ")VALUES(?" + strParaVal + ");";

 cnn.Open();
 cmd.ExecuteNonQuery();
 cnn.Close();
}


Väldigt enkelt och inte det snyggaste sättet direkt.
För att detta ska funka behöver du klassen Parameter:

public class Parameter
{
 public Parameter(string name, string val)
 {
  Name = name;
  Value = val;
 }
 public string Name;
 public string Value;
}


För att göra databasanropet gör du följande:

ArrayList lista = new ArrayList();

lista.Add(new Parameter("subject", "Träning"));
lista.Add(new Parameter("news", "Statistik har visat att träning ger färdighet."));
// Forsätt lägg till parametrar tills du tröttnar.

DataBaseCall(lista);


Detta är ett fult exempel, klockan är sent :-)


Svara

Sv: Skapa en class

Postades av 2007-07-05 08:29:56 - Martin Adrian

>Saken är den att jag vill kunna skicka in obegränsat med parametrar till min klass

Varför det? Klassen skall väl innesluta något objekt och ha metoder för att skapa, hämta och uppdatera objektet. Objektet måste väl ha ett begränsat antal fält som kan förändras.

(Vad menar du med att skicka parametrar till en klass?)



Svara

Sv:Skapa en class

Postades av 2007-07-09 19:27:56 - Jens Löwerroot

Okej, tack så mycket magnus, dock så har jag delat upp din kod lite grann för att få lite mer förståelse i koden när man använder den. Då ville jag gärna ha en metod för insert, en för delete, en för update så därför gjorde jag även en egen metod för att skapa parametrarna så att jag slipper skriva samma kod tre gånger. Jag har även lagt in lite frågor i koden som jag hoppas att du eller någon kan besvara. Som i din foreach sats så kommer jag inte åt p.Name osv utan har du ärvt classen Parameter i classen DataConnection eller hur har du tänkt det där för jag kan ju inte skapa en ny instans av parameter där för då förlorar jag ju alla värden i den och är det inte dumt att döpa classen till parameter då det redan finns ett inbyggt object eller vad man säger som heter parameter, borde inte ett smartare namn på classen vara ParameterName eller något så att jag inte skriver över "den inbyggda parameter" i fall att jag skulle vilja använda mig utav ms sql istället för mysql nångång?

public class DataConnection
{
    //variabler
    string _strTableName;
    string _strParaName = "";
    string _strParaValue = "";
    MySqlConnection cnn = new MySqlConnection();
    MySqlCommand cmd = new MySqlCommand();

	public DataConnection()
	{
		//
		// TODO: Add constructor logic here
		//
	}

    public String TableName
    {
        get { return _strTableName; }
        set { _strTableName = value; }
    }

    public void MakeParameters(ArrayList parameters)
    {
        foreach (Parameter p in parameters)
        {
            //Här hittar jag inte p.Name osv, har du använt dig utav arv eller något liknande?
            cmd.Parameters.Add(new MySqlParameter(p.Name, p.Value));
            _strParaName = _strParaName + "," + p.Name;
            _strParaValue = _strParaValue + "," + p.Value;
        }
    }
    

    public void Insert()
    {
        try
        {
            cmd.Connection = cnn;
            cmd.CommandText = "INSERT INTO " + _strTableName + "(" + _strParaName + ")VALUES(?" + _strParaValue + ");";
            cnn.Open(); 
            cmd.ExecuteNonQuery();
        }
        catch
        { 
            //Finns det något man kan lägga till i catch? O.o
        }
        finally
        {
            cnn.Close();
        }
    }
}


public class Parameter
{
    //Variabler
    string Name;
    string Value;

	public Parameter(string name, string value)
	{
        Name = name;
        Value = value;
	}
}


private void AddData()
    {
        DataConnection DataCon = new DataConnection();
        DataCon.TableName = "test_news";
        ArrayList lista = new ArrayList();
        lista.Add(new Parameter("subject", "Min första nyhet"));
        lista.Add(new Parameter("news", "Det här var skoj, äntligen händer det lite på sidan"));
        DataCon.MakeParameters(lista);
        DataCon.Insert();
    }


Finns det något bättre sätt att lösa det här på eller är det här sättet helt fel på något sätt?


Martin > Kolla på vad magnus svarade, han förstod vad jag menade och jag vill kunna skicka in obegränsat med parametrar för att kunna använda samma klass på olika sidor.


Svara

Sv: Skapa en class

Postades av 2007-07-09 22:53:37 - Magnus Bergström

Var nästan mitt i natten så jag trodde inte ens min kod dkulle kompilera :-)

Anledningen till att du inte kommer åt p.Name är att du deklarerat variablerna i klassen som privata. Anger du inte åtkomst-level blir de automatiskt privata.

Parameter-klasen borde i så fall se ut som så här kanske:

public class Parameter
{
private string m_name;
private string m_value;

public Parameter(string name, string val)
{
m_name = name;
m_value = val;
}

public string Name
{
get{return m_name;}
}
public string Value
{
get{return m_value;}
}
}


Sen är det alltid bra att fånga exceptions i catch-statements och sen logga dem någonstans. Annars har du inte alls samma koll på var och hur ofta din kod kraschar.
Du kan till och med fånga specifika exceptions om du vill göra olika saker med dem.

try
{
// Gör lite grejer
}
catch (SqlException ex)
{
// Specifikt databasrelaterat fel
}
catch (Exception ex)
{
// alla andra fel
}


Personligen föredrar jag att skapa olika klasser för olika objekt, göra de statiska och köra statiska metoder. Det blir en hel del mer kodande, men det händer ofta att man vill göra något speciellt i metoderna, och då blir det jobbigt om allt är samlat i ett. Funkar kanske helt ok för insert och delete, men select brukar man alltid tweaka SQL:en ordentligt efter ett tag.

Ett annat tips är att kolla lite på lagrade procedurer, då flyttar du över mycket av själva databas-exekveringen till databasen och det blir snyggare och enklare kod.


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 718
27 958
271 751
3 250
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies