C#中的代码错误

时间:2011-04-13 03:00:26

标签: c# winforms

此代码有哪些缺点:

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();

4 个答案:

答案 0 :(得分:4)

你的意思是除了SqlConnection不会被处理这个事实,并且SqlCommand是以邀请SQL注入攻击的方式编写的吗?

相关的XKCD漫画:

http://xkcd.com/327/

答案 1 :(得分:3)

一个主要的缺点是你不引用你的字符串或使用参数化查询,所以输入O'Brien作为姓氏的人会得到一个例外。

当然,这也意味着有人可以在文本框中输入任意SQL并让你为它们执行它。那很糟糕。

答案 2 :(得分:0)

  1. 可能的代码冗余/零可重用性。尝试在静态Connection类中包装数据库连接及其相关的所有内容。

  2. 无限期保留资源(数据库连接)。使用 static Connection类将解决此问题,否则使用“using”块来处理连接对象。

  3. 连接字符串定义为显式字符串。使用App.Config定义字符串,使用ConfigurationManager来抓取它。

  4. 查询字符串定义为显式字符串。如果必须使用Text作为CommandType,请确保使用参数化查询。使用SqlParameter类添加参数及其值。

  5. 不使用“try-catch”阻止。每次使用数据库连接时都使用“try-catch”块,否则即使您停止调试,在抛出异常后您的连接仍将保持打开状态。

  6. 还有一些未成年人。

  7. ...&安培;你能否告诉我“代码错误”的内容是什么?

答案 3 :(得分:0)

与安全编码有关....

您的代码容易受到SQL注入攻击,因为您在代码中直接使用txtName.text来形成查询。应使用参数化查询。此外,您应该在使用之前验证txtName.txt。就是这样。