Kom ihåg mig?
Home Menu

Menu


vilket sätt föredrar ni skriva db-uppkopping i c# .NET?

Ämnesverktyg Visningsalternativ
Oläst 2016-09-09, 00:32 #1
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
Standard vilket sätt föredrar ni skriva db-uppkopping i c# .NET?

Hello, tänkte bara hör med er vilket sätt ni föredrar och om ena är bättre än den andra.
Eller ni kanske har ett annat sätt som ni tycker är att föredra dela gärna med er.

alternativ 1:
Kod:
string strConnectionString = ConfigurationManager.ConnectionStrings["MySQL"].ConnectionString;

        using (MySqlConnection sqlConn = new MySqlConnection(strConnectionString))
        {
            MySqlCommand cmd = new MySqlCommand(strSql, sqlConn);
            sqlConn.Open();
            cmd.ExecuteNonQuery();
        }

alternativ 2:
Kod:
        string strConnectionString = ConfigurationManager.ConnectionStrings["MySQL"].ConnectionString;
        MySqlConnection sqlConn = new MySqlConnection(strConnectionString);
        MySqlCommand cmd = new MySqlCommand(strSql, sqlConn);
        sqlConn.Open();
        cmd.ExecuteNonQuery();
        sqlConn.Close();
en fråga gällande alternativ ett... visst är det så att jag inte behöver stänna connection med sqlConn.Close(); eller har jag missuppfattat detta?
naak2803 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-09, 07:11 #2
digiArt digiArt är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jan 2004
Inlägg: 1 429
digiArt digiArt är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jan 2004
Inlägg: 1 429
Jag skrev enligt alt 1 tidigare (använder entity framework numera).

Det är bra kutym att använda using och måsvingarna. Using ropar på close och dispose, då riskerar du inte att glömma close.

Det finns givetvis undantag när du själv vill styra, exempelvis vid transaktioner.
digiArt är inte uppkopplad   Svara med citatSvara med citat
Oläst 2016-09-09, 10:33 #3
dAEks avatar
dAEk dAEk är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Dec 2006
Inlägg: 678
dAEk dAEk är inte uppkopplad
Mycket flitig postare
dAEks avatar
 
Reg.datum: Dec 2006
Inlägg: 678
Vet inte vilka behov du har men jag rekommenderar att du labbar lite med EntityFramework om du jobbar med RDBMS. Du kommer bli mer produktiv och det är mycket trevligare att jobba med.

Använd Dependency Injection (DI) istället för att new:a upp dina instanser. Det är sjukt mycket smidigare. DI gör bl.a. att du slipper skriva new Foo(), new Bar(); på olika ställen i koden. DI-containern sköter det åt dig så länge du reggar dina beroenden i ett sorts register.

Startup.cs (eller vad du nu har för entry point i din app):
Kod:
public class Startup
{
	public void Configuration(IAppBuilder app) 
	{
		var builder = new ContainerBuilder();
		builder.Register<IDbConnection>(context => new MySqlConnection(ConfigurationManager.ConnectionStrings["MySQL"].ConnectionString))
			.InstancePerRequest();
		var container = builder.Build();
		
		DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
	}
}
Där du behöver en kopping till databasen specar du bara beroendet i construktorn.
Kod:
public class HomeController : Controller
{
	private readonly IDbConnection connection;
	
	public HomeController(IDbConnection connection) 
	{
		this.connection = connection;
	}
	
	public ActionResult Index() 
	{
		//här finns connection tillgängligt "automagiskt"
	}
	
	public ActionResult About() 
	{
		//här finns connection tillgängligt "automagiskt"
	}
}

Lägg märke till hur tydlig koden blir; för att kunna använda den här klassen behöver man tillhandahålla en implementation av IDbConnection.
Just det här fallet med en Controller är kanske inte det bästa men du fattar säkert principen.
dAEk är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 20:07.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017