φίλε, σε αυτό που λέει ο παναγιώτης έχει 100% δίκιο. παναγιώτη στο post του, ο φίλος λέει ότι του βγάζει λάθος. φυσικά και δεν κάνει compile.
SQL injections είναι πολύ άσχημα. για το τί είναι ακριβώς ένα sql injection attack δες εδώ . για να γλιτώσουμε από αυτά, έχουμε stored procedures και παραμετρικά queries.
μιας και πιάσαμε τις σωστές τεχνικές για το πως συνδεόμαστε σε μια βάση και πέρνουμε από αυτήν δεδομένα , έχω να σου πω το εξής.
1) τα connection credentials - που συνδεόμαστε στην βάση - δεν τα βάζουμε καρφωτά στον κώδικα. αλλά μπορείς να τα έχεις στο web.config, το οποίο είναι το σωστό μέρος να τα βάλεις. μπορείς να κάνεις encrypt το web.config.
π.χ σε ένα sample asp.net website που χρησιμοποιώ για τα training sessions μου, μέσα στο web.config σε κάποιο σημείο του xml αρχείου θα βρεις αυτό εδώ
<
connectionStrings>
<
add name="NorthwindConnectionString" connectionString="Data Source=(local);Initial Catalog=Northwind;Integrated Security=True; Min Pool Size=20" providerName="System.Data.SqlClient"/>
</
connectionStrings>
2) τώρα θα μου πεις, πως θα "πάρω" τα connection credentials, από τον κώδικα μου.γράφεις κάπου στον κώδικα σου το εξής (π.χ Page_Load event, Button1_Clicκ)
// Get the connection string from the configuration file
string connectionString = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
3) Τώρα (ελπίζω να μην σε μπερδεύω), καλό είναι να ξεχωρίσεις τον κώδικα που γράφεις στο code behind file (.cs ) με τον κώδικα που π.χ ανοίγει το connection στην βάση κ.τ.λ. οπότε πήγαινε στο App_Code special folder που έχεις στον solution explorer. εκεί μπορείς να κάνει add a new item-> class file. ονόμασε το π.χ ConnectionManager . αυτός είναι ο data access κώδικας σου και έτσι είναι πιο "καθαρά" τα πράγματα, seperation of concerns,modularity.
δηλαδή άμα σου βγάλει ένα λάθος-exception ξέρεις που να ψάξεις. ο κώδικας σου είναι πιο maintenable με αυτό τον τρόπο.επίσης σε ένα άλλο project που θα κάνεις στο μέλλον μπορείς απλά να κάνεις Add, το class file Που κάνει data access-retrieve, χωρίς να ξαναγράφεις τα πάντα όλα από την αρχή. φυσικά θα κάνεις κάποιες αλλαγές.... είναι η λογική των n-tier applications. και είναι μια καλή λογική να έχεις για τις εφαρμογές σου είτε είναι asp.net ή desktop.
για να σου δώσω ένα παράδειγμα σε σχέση με το connectionstring που σου έδωσα πριν , μπορείς μέσα στον data access (ConnectionManager) κώδικα να βάλεις την εξής (static) Μέθοδο.
public static SqlConnection GetNorthwindConnection()
{
// Get the connection string from the configuration file
string connectionString = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
// Create a new connection object
SqlConnection connection = new SqlConnection(connectionString);
// Open the connection, and return it
connection.Open();
return connection;
}
4) τώρα από το button1_click event handling routine, καλείς την GetNorthwindConnection() κάπως έτσι
try
{
SqlConnection connection = ConnectionManager.GetNorthwindConnection();
.......
...........
}
catch (SqlException ex)
{
// βάλε και ένα label στο page σου.
Label1.text =
"Cannot connect to the database.";
}
5) τώρα και από αυτά που σου γράφει ο παναγιώτης μπορείς να πας παρακάτω. αν όχι εδώ είμαστε....
Νικόλαος Καντζέλης
BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT