正在转义C#中字符串中的特殊字符

本文关键字:字符串 特殊字符 转义 | 更新日期: 2023-09-27 17:58:11

需要您在下面的帮助。

我有代码,我正在检查数据表中是否存在特定的行;若该行不存在,那个么我将该行添加到数据表中。当行值包含特殊的字符链接'(单引号)时,此操作正常,但失败。

以下是代码:

string lastName = dgRow.Cells[2].Text.Replace("amp;", "");
DataRow[] dr = dt.Select("LastName='" + lastName + "'"); //check whether row is available in datatable or not
if (dr.Length <= 0)// Condition to check if row is there in data table
{
    dt.Rows.Add();
    dt.Rows[dt.Rows.Count - 1]["FirstName"] = dgRow.Cells[1].Text;
    dt.Rows[dt.Rows.Count - 1]["LastName"] = dgRow.Cells[2].Text;
    dt.AcceptChanges();
}
return dt; //Return modified data table to calling function.

当LastName包含单引号时,此代码将失败。

我需要一个不删除姓氏引号的解决方案。

感谢

正在转义C#中字符串中的特殊字符

我强烈建议使用LINQ,而不是首先使用dt.Select()。它避免了整个"将查询嵌入字符串"的问题,这个问题非常可怕,让人想起SQL注入攻击。

因此:

var lastNameToFind = dgRow.Cells[2].Text.Replace("&amp;", "");
var matched = dt.AsEnumerable()
                .Where(dr => dr["LastName"].Equals(lastNameToFind))
                .Any();
if (matched)
{
    DataRow newRow = dt.NewRow();
    dt.Rows.Add(newRow);
    newRow["FirstName"] = dgRow.Cells[1].Text;
    newRow["LastName"] = dgRow.Cells[2].Text;
    dt.AcceptChanges();
}

尝试更改:

DataRow[] dr = dt.Select("LastName='" + dgRow.Cells[2].Text.Replace
("amp;", "")+ "'");

到此:

DataRow[] dr = dt.Select("LastName='" + dgRow.Cells[2].Text.Replace
("amp;", "").Replace("''", "''''") + "'");

(未测试)

您可以将单引号替换为双引号:

Dim LastName As String = Replace(txtLastName.Text, "'", "''")

但这不是一个好的做法。。。

检查一下:替换asp.net中的撇号以防止SQL错误