需要你的帮助。
我有代码,我正在检查数据表中是否存在特定行;如果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包含单引号时,此代码失败。
我需要一个解决方案,我不会删除姓氏的引号。
由于
答案 0 :(得分:5)
首先,我强烈建议使用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();
}
答案 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, "'", "''")
但这不是好习惯......