我是将数据库集成到程序中的新手,我最近开始处理连接到SQL数据库的Windows窗体(C#)。 在我的代码中,我以下列方式拧紧SQL语句:
sc.Open();
string Get_Form = ("SELECT MoM_Form.MoM_ID FROM MoM_Form WHERE MoM_Form.MoM_ID='" + TextBox_FormID.Text + "'");
SqlCommand cmd = new SqlCommand(Get_Form, sc);
int Get_Form_ID = Convert.ToInt32(cmd.ExecuteScalar());
sc.Close();
但是,我记得有关SQL注入的一课,它清除了你不应该允许用户直接将数据插入到SQL语句中。
这是将SQL语句写入代码的正确而安全的方法吗? 其次,如果我禁止用户插入字符串作为'进入文本框,他还能做到伤害吗? 第三,如果不是,哪种插入方式最好?使用程序和参数?
答案 0 :(得分:6)
您是否有充分的理由不使用 ORM?实体框架,Linq to SQL,NHibernate ,仅举几例。除非您正在执行一些非常复杂的SQL语句,否则ORM每次都是合乎逻辑的选择。它将处理连接,提供一定程度的安全性(即采取措施避免SQL注入),以及使代码更容易阅读和维护。
答案 1 :(得分:1)
不,不是;你的直觉是正确的。这是将SQL语句写入代码的正确而安全的方法吗?
其次,如果我禁止用户将字符串作为'插入文本框,他仍然能够造成伤害吗?
可能,虽然它不会那么微不足道。
第三,如果不是,哪种插入方式最好?使用程序和参数?
是的,使用参数。尽管可以使用存储过程,但不需要使用存储过程。您可以使用Parameters.AddWithValue
SqlCommand
对象添加参数
sc.Open();
string getForm = ("SELECT MoM_Form.MoM_ID FROM MoM_Form WHERE MoM_Form.MoM_ID=@id");
SqlCommand cmd = new SqlCommand(getForm, sc);
cmd.Parameters.AddWithValue("id", TextBox_FormID.Text)
int Get_Form_ID = Convert.ToInt32(cmd.ExecuteScalar());
sc.Close();