日期:2014-05-18  浏览次数:20980 次

rowfilter表达式中变量的特殊字符处理
工作環境:windowsXP(SP3)+.net2005+crystalReport11開發版 

以下為加載數據源及過濾的代碼: 
DataTable dt = new DataTable(); 
private void Form2_Load(object sender, EventArgs e) 

  DataColumn dc = new DataColumn("c1", typeof(int)); 
  dt.Columns.Add(dc); 
  dc = new DataColumn("c2", typeof(string)); 
  dt.Columns.Add(dc); 
  DataRow dr = dt.NewRow(); 
  dr[0] = 1; 
  dr[1] = "中國"; 
  dt.Rows.Add(dr); 
  dr = dt.NewRow(); 
  dr[0] = 2; 
  dr[1] = "香港"; 
  dt.Rows.Add(dr); 
  dr = dt.NewRow(); 
  dr[0] = 3; 
  dr[1] = "台灣"; 
  dt.Rows.Add(dr); 
  dr = dt.NewRow(); 
  dr[0] = 4; 
  dr[1] = "RP001_A'JANAE(女)"; 
  textBox1.Text = dr[1].ToString().Trim(); 
  dt.Rows.Add(dr); 
  dr = dt.NewRow(); 
  dr[0] = 5; 
  dr[1] = @"RP001_A\JANAE(女)"; 
  dt.Rows.Add(dr); 

  dataGridView1.DataSource = dt.DefaultView; 


private void button1_Click(object sender, EventArgs e) 

  string filter = textBox1.Text.Trim(); 
  if (filter == "") 
  dt.DefaultView.RowFilter = ""; 
  else 
  dt.DefaultView.RowFilter = "c2='" + @filter + "'"; 

說明:c2列的資料是不可以修改的;除非在取資料時對資料行中的特殊字符做處理(不希望如此). 
問題:要顯示c2列內容為"RP001_A'JANAE(女)"的資料. 
當按下button1時,提示錯誤:語法錯誤: 'JANAE' 運算子之後遺漏運算元。
string filter = textBox1.Text.Trim(); 
改成以下也不行 
string filter = textBox1.Text.Trim().Replace("'", "\'");

------解决方案--------------------
==>dr[1] = "RP001_A'JANAE(女)"; 
改成下面的看看:
dr[1] = "RP001_A''JANAE(女)"; 


------解决方案--------------------
如1楼所言,用两个单引号替换一个单引号:

string filter = textBox1.Text.Trim().Replace("'", "''");
------解决方案--------------------
探讨
如1楼所言,用两个单引号替换一个单引号:

string filter = textBox1.Text.Trim().Replace("'", "''");