SQL 在 C# 中注入

SQL injection in C#

我的代码安全可靠吗?

if (con.State == ConnectionState.Closed) 
    con.Open();

SqlCommand cmd4 = new SqlCommand();
cmd4.Connection = con;
cmd4.CommandText = "exec [Insert_Request] @FileCode = " + FileCodeArchiveID + ", @FirstName = '" + FirstName_RequestInsert_textBox.Text + "' ";
cmd4.ExecuteNonQuery();

if (con.State == ConnectionState.Open) 
     con.Close();

还是使用 cmd4.Parameters.Add() 更好?

作为一般规则,在构建 SQL commands/queries 时避免使用字符串连接。特别是如果一个或多个片段来自不受信任的来源,例如用户输入。

你应该这样做:

     SqlCommand cmd4 = new SqlCommand();
     cmd4.Connection = con;
     cmd4.CommandType = CommandType.StoredProcedure;
     cmd4.CommandText = "Insert_Request";
     cmd4.Parameters.AddWithValue("@FileCode", FileCodeArchiveID);
     cmd4.Parameters.AddWithValue("@FirstName",FirstName_RequestInsert_textBox.Text); 
     cmd4.ExecuteNonQuery();

首先,它更易于阅读(在我看来),其次使用参数回避了 sql 注入漏洞。