在c#代码中包含查询的最佳方式

本文关键字:最佳 方式 查询 包含 代码 | 更新日期: 2023-09-27 18:09:33

我是将数据库集成到程序中的新手,我最近开始研究连接到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语句到一个代码?其次,如果我禁止用户在文本框中插入字符串as ',他还能造成伤害吗?第三,如果不是,那么插入它们的最佳方式是什么?使用程序和参数?

在c#代码中包含查询的最佳方式

您不使用ORM是否有一个很好的理由?实体框架,Linq to SQL, NHibernate,只是举几个例子。除非您正在执行一些非常复杂的SQL语句,否则ORM总是合乎逻辑的选择。它将处理连接,提供一定程度的安全性(即采取措施避免SQL注入),以及使您的代码更易于阅读和维护。

所以这是一个正确和安全的方式来写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();