此代码有哪些缺点:
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source=.\sqlExpress;Initial Catalog=Learn;Integrated Security=True";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "Insert Into tblUser(name,family,tel)Values('" + txtName.Text + "','" + txtFamily.Text + "','" + txtTel.Text + "')";
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
答案 0 :(得分:4)
答案 1 :(得分:3)
一个主要的缺点是你不引用你的字符串或使用参数化查询,所以输入O'Brien
作为姓氏的人会得到一个例外。
当然,这也意味着有人可以在文本框中输入任意SQL并让你为它们执行它。那很糟糕。
答案 2 :(得分:0)
可能的代码冗余/零可重用性。尝试在静态Connection类中包装数据库连接及其相关的所有内容。
无限期保留资源(数据库连接)。使用 static Connection类将解决此问题,否则使用“using”块来处理连接对象。
连接字符串定义为显式字符串。使用App.Config定义字符串,使用ConfigurationManager来抓取它。
查询字符串定义为显式字符串。如果必须使用Text作为CommandType,请确保使用参数化查询。使用SqlParameter类添加参数及其值。
不使用“try-catch”阻止。每次使用数据库连接时都使用“try-catch”块,否则即使您停止调试,在抛出异常后您的连接仍将保持打开状态。
还有一些未成年人。
...&安培;你能否告诉我“代码错误”的内容是什么?
答案 3 :(得分:0)
与安全编码有关....
您的代码容易受到SQL注入攻击,因为您在代码中直接使用txtName.text来形成查询。应使用参数化查询。此外,您应该在使用之前验证txtName.txt。就是这样。