正在转义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包含单引号时,此代码将失败。
我需要一个不删除姓氏引号的解决方案。
感谢
我强烈建议使用LINQ,而不是首先使用dt.Select()
。它避免了整个"将查询嵌入字符串"的问题,这个问题非常可怕,让人想起SQL注入攻击。
因此:
var lastNameToFind = dgRow.Cells[2].Text.Replace("&", "");
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错误