2013-02-07 60 views
2

需要您在下面的帮助。在C中字符串中转义特殊字符#

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

下面是代码:当姓氏包含单引号

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. 

此代码失败。

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

感谢

+0

此代码正在Web窗体上运行? –

+0

是的,它的网页形式 – user1717270

+0

你的意思是这个代码dgRow.Cells [2] .Text包含引号? –

回答

0

尝试改变:

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

这样:

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

(未经测试)

+0

[以正确的方式转义DataTable筛选器表达式中的字符]更好的实现(如@Rawling所述)(http://stackoverflow.com/问题/ 386122/correct-way-to-escape-characters-in-a-datatable-filter-expression) –

+0

谢谢,这是工作,但它在newRow [“LastName”] = dgRow.Cells [2] .Text失败;也在我的数据表中,只有单引号应该去 – user1717270

5

而是首先使用dt.Select()的,我会强烈建议使用LINQ。它避免了整个“在字符串中嵌入查询”问题,这个问题非常可怕,让人联想到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(); 
} 
+0

我不想把这个建议作为编辑,以防万一我误解了。我在上面实现了你的代码,但得到了一个'dr'未定义的错误。经过一些阅读以提高我对LINQ的理解(所以感谢提供这样的提示!)我将它改为.Where(dr => dr [“LastName”]。Equals(lastNameToFind))并解决了这个问题。感谢您的解决方案。 – Kate

+0

@Simon:是的,编辑感谢。 –