Wie ich in den Kommentaren sagte - Sie sollten immer Parameter in Ihrer Abfrage verwenden - NIE WIEDER Ihre SQL-Anweisungen selbst zu verketten.
Auch: Ich würde empfehlen, den Click-Event-Handler vom eigentlichen Code zum Einfügen der Daten zu trennen.
Ich würde Ihren Code also so umschreiben, dass er etwa so aussieht
In der Code-Behind-Datei Ihrer Webseite ( yourpage.aspx.cs
)
private void button1_Click(object sender, EventArgs e)
{
string connectionString = "Data Source=DELL-PC;initial catalog=AdventureWorks2008R2 ; User ID=sa;Password=sqlpass;Integrated Security=SSPI;";
InsertData(connectionString,
textBox1.Text.Trim(), -- first name
textBox2.Text.Trim(), -- last name
textBox3.Text.Trim(), -- user name
textBox4.Text.Trim(), -- password
Convert.ToInt32(comboBox1.Text), -- age
comboBox2.Text.Trim(), -- gender
textBox7.Text.Trim() ); -- contact
}
In einigen anderen Codes (z. B. einem databaselayer.cs
):
private void InsertData(string connectionString, string firstName, string lastname, string username, string password
int Age, string gender, string contact)
{
// define INSERT query with parameters
string query = "INSERT INTO dbo.regist (FirstName, Lastname, Username, Password, Age, Gender,Contact) " +
"VALUES (@FirstName, @Lastname, @Username, @Password, @Age, @Gender, @Contact) ";
// create connection and command
using(SqlConnection cn = new SqlConnection(connectionString))
using(SqlCommand cmd = new SqlCommand(query, cn))
{
// define parameters and their values
cmd.Parameters.Add("@FirstName", SqlDbType.VarChar, 50).Value = firstName;
cmd.Parameters.Add("@Lastname", SqlDbType.VarChar, 50).Value = lastName;
cmd.Parameters.Add("@Username", SqlDbType.VarChar, 50).Value = userName;
cmd.Parameters.Add("@Password", SqlDbType.VarChar, 50).Value = password;
cmd.Parameters.Add("@Age", SqlDbType.Int).Value = age;
cmd.Parameters.Add("@Gender", SqlDbType.VarChar, 50).Value = gender;
cmd.Parameters.Add("@Contact", SqlDbType.VarChar, 50).Value = contact;
// open connection, execute INSERT, close connection
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
}
Code wie dieser:
- ist nicht anfällig für SQL-Injection-Angriffe
- auf SQL Server viel besser funktioniert (da die Abfrage einmal in einen Ausführungsplan geparst, dann zwischengespeichert und später wiederverwendet wird)
- trennt den Event-Handler (Code-Behind-Datei) von Ihrem eigentlichen Datenbankcode (und bringt die Dinge dorthin, wo sie hingehören - was dazu beiträgt, "übergewichtige" Code-Behinds mit tonnenweise Spaghetti-Code zu vermeiden, die alles von der Behandlung von UI-Ereignissen bis zum Datenbankzugriff erledigen) NICHT ein gutes Design!)