MyI創建了一個應從數據收集信息的表單。這個數據可能包括隨機字符,包括「'等。我的問題是我如何安全地插入數據,而沒有SQL注入攻擊,我可以在哪裏插入轉義字符,以便這種形式不會拋出錯誤,每當一個字符像'」/和等等被插入。安全地將數據插入SQL表並避免sql插入錯誤
這是到目前爲止我的代碼:
public string InsertRecordSet()
{
source = new FileInfo(@"c:\scripts\db_connection.txt");
stream = source.OpenText();
String text = stream.ReadLine();
stream.Close();
String uid = text.Substring(0, text.IndexOf(":"));
String pw = text.Substring(text.IndexOf(":") + 1, (text.Length - uid.Length - 1));
String connectionString = "dsn=" + "db" + "; uid=" + uid + "; pwd=" + pw + ";";
String statement = "INSERT INTO table (SubmitDate, FirstName, LastName, Email, Phone, Major, Description, HearAbout) VALUES (@SubmitDate, @FirstName, @LastName, @Email, @Phone, @Major, @Description, @HearAbout)";
conn = new OdbcConnection(connectionString);
command = new OdbcCommand(statement, conn);
command.Parameters.AddWithValue("@SubmitDate", DateTime.Now);
command.Parameters.AddWithValue("@FirstName", txtFname.Text);
command.Parameters.AddWithValue("@LastName", txtLname.Text);
command.Parameters.AddWithValue("@Email", txtEmail.Text);
command.Parameters.AddWithValue("@Phone", txtPhone.Text);
command.Parameters.AddWithValue("@Major", txtMajor.Text);
command.Parameters.AddWithValue("@Desciption", txtDescription.Text);
command.Parameters.AddWithValue("@HearAbout", txtMaxwell.Text);
conn.Open();
try
{
command.ExecuteNonQuery();
return "true";
}
catch (OdbcException oe)
{
_dbError = true;
Session.Contents.Add("USIFormException", oe);
return (oe.ToString());
}
finally
{
conn.Close();
}
}
嗯,這解決了隨機注入問題,現在的另一個問題是,只要用戶輸入如「」等它拋出一個數據庫錯誤值。任何想法如何添加轉義字符或沒有錯誤被拋出? – Paradigm
當我這樣做,現在我得到這個錯誤,出於某種原因:錯誤[42000] [微軟] [ODBC SQL Server驅動程序] [SQL Server]必須聲明變量'@SubmitDate' – Paradigm
不完全對,命令對象不解析無效SQL的內容。因爲參數是分開傳遞的,所以它們可以包含SQL&',但是因爲它們從不被解析,所以這不是問題。 –