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

时间:2013-02-07 07:08:17

标签: c#

需要你的帮助。

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

以下是代码:

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包含单引号时,此代码失败。

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

由于

3 个答案:

答案 0 :(得分:5)

首先,我强烈建议使用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();
}

答案 1 :(得分:0)

尝试更改:

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

到此:

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

(未测试的)

答案 2 :(得分:0)

您可以将单引号替换为 Double Quote

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

但这不是好习惯......

检查一下:Replacing apostrophe in asp.net to prevent SQL error