Vad tror ni är smartast!
92 svar · 2 300 visningar · startad av Nickemannen · sida 2 av 5
Frågan, av Nickemannen
Vad tror ni är smartast! Lägga datbaskopplingsträngen i global filen eller tar det för mycket minne? eller ha med en include fil? kan ju bli jobbigt om man skall byta lösenord eller något senare. OBS! jag menar bara strängen t.e.x String strConn = "server=(local)\\NetSDK;database=pubs;TrustedConnection=yes";
Läs frågan i sin helhet →PatrikB, man skickar in användarnamn, lösenord, databas och servernamn som parametrar till sin klass. :)
kristoffer> Det ser ok ut, men utveckla klassen mer, med en metod ( T.ex. konstruktorn ) som skapar en instans av en SqlConnection som är en privat variabel för klassen, som du sedan kan använda i andra metoder.
T.ex:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web;
namespace blabla
{
public class Database
{
private SqlConnection myConnection;
public Database( String server, String db, String user, String pwd ) {
this.myConnection = new SqlConnection( "server=" + server + "; database=" + db + "; uid=" + user + "; pwd=" + pwd + ";" );
}
public static DataSet GetDataSet(string Sql)
{
DataSet DS = new DataSet();
SqlDataAdapter myDataAdapter = new SqlDataAdapter(Sql, this.myConnection);
DataSet myDataSet = new DataSet();
myDataAdapter.Fill(myDataSet);
return myDataSet;
}
}
}
Typ. Sen kan du utveckla den mer för att göra klassen ännu mer användbar. :)
:o
Uh, varför hittas inte Application-variabeln?
"The name 'Application' does not exist in the class or namespace 'myProject.myFile'"
ett annat förslag på vart man bör lägga connectionstringen är i web.config. Exempel
web.config:
<configuration>
<appSettings>
<add key="ConnectionString" value="server=****;database=****; user id=***; password=***" />
</appSettings>
</configuration>
i komponenten eller aspx sidan:
dim connstring as string = ConfigurationSettings.AppSettings("connectionString")
importera System.Configuration för att detta ska funka.
Vad skall jag importera för att Application-variabeln skall híttas?
SPiN: GetDataSet(string Sql) skall inte vara statisk, väl? :)
renholm:
As web.config is a text file, consider it compromisable. While no-one has
compromised a .NET application yet, paranoia is a good thing, considering
past history.
huhu, så fånigt :)
tänkte ni ville slippa kompilera om koden om ni byter DB eller liknande.
Vad skall jag importera för att Application-variabeln skall híttas?
System.Web känns rätt bra, innehåller HttpApplication och låter som det du vill ha.
Det gör jag redan.
Självklart ska den ( GetDataSet ) inte vara statisk.
man skulle kunna kryptera connection stringen om man vill ha den i web.config, så att den inte är läsbar i fall någon skulle komma över filen. Men ni vet väl att web.config är skyddad så att ingen kan komma åt den över webben.
Kryptera hur?
PatrikB> :r
Jag såg inte att du hade givit ett liknande exempel som jag hade gjort! Ledsen för det, läste inte igenom hela sidan innan jag skrev. :)
Om man ska lägga in strängen i web.config så blir man ju låst till den, och man förlorar en hel del av det dynamiska som .NET står för. Precis som PatrikB sa om att man inte ska lagra strängen i en klass. Man bygger upp den dynamiskt istället.
hum, igenom att använda System.Security.Cryptography, men vet inte om det är möjligt ännu, har inte hunnit sätta mig in i det.
SPiN, visst kan man lägga det i en class, men då sak du in o kompilera om denna class så fort du ändrar din connectionstring eller hur? eller har jag missat något i ert resonemang? det bästa vore igentligen att ha egna config filer som är xml baserade och som t.ex inte ligger i rooten, de kan innehålla connectinString och andra inställningar, det ända som behövs göra om man ändra connstring är att ändra i den filen så kommer ändringen gå igenom genast eftersom varjegång data classen man skapat körs hämtar den från vår egna config.
SPiN, visst kan man lägga det i en class, men då sak du in o kompilera om denna class så fort du ändrar din connectionstring eller hur? eller har jag missat något i ert resonemang?
Jäpp, du har missat hur jag menar. :)
Man behöver inte kompilera om.
Studera följande:
namespace blabla
{
public class Database
{
private SqlConnection myConnection;
public Database( String server, String db, String user, String pwd ) {
this.myConnection = new SqlConnection( "server=" + server + "; database=" + db + "; uid=" + user + "; pwd=" + pwd + ";" );
}
Till konstruktorn skickas de värden som behövs för att bygga upp strängen, alltså server, databas, användare och lösenord. Den byggs sedan upp och skickas som argument till konstruktorn för SqlConnection som är en klassvariabel som kan/ska användas av andra metoder för att hämta information från databasen.
Du anropar så här:
Database db = new Database( "localhost", "minDatabas", "su", "whatever" );
Strängen blir då som följer:
server=localhost; database=minDatabas; uid=su; pwd=whatever;
Dynamiskt! :)
SPiN, visst kan man lägga det i en class......
Enligt mig "kan" man inte lägga conn-strängen hårdkodad i en class. Det skulle medföra att just denna klass endast kan arbeta mot en applikation/databas. Vitsen är ju att denna "super data klass" ska kunna återanvändas i andra applikationer på samma maskin och då måste conn-strängen kunna byggas dynamiskt, annars skulle man behöva kompilera flera stycken likadan klasser vilket är slöseri
SPiN> No hard feelings
cya,
PatrikB
SPiN menar ungefär på samma sätt, att man via konstruktorn får connecting stringen när man skapar objektet,
Database db = new Database(getSetting("connectingString"));
jag tänkte att man har t.ex flera olika moduler som har olika datakällor och inställningar, då är det vettigt att ha en config fil för varje modul man har. Det är det jag menade med mitt sista inlägg.
Men undrar vart du tänker ha denna sträng:
Database db = new Database( "localhost", "minDatabas", "su", "whatever" );
Menar du att ha den i .aspx sidan? Om man kör Visual Studio .NET skapas codebehind och som då måste kompileras om när man vill ändra connecting stringen. Därför menar jag att det är bättre att när man skickar connecting stringen till konstruktorn så hämtar man den från en vanlig xml fil.