如何在获取数据时删除特殊字符

时间:2013-10-06 19:31:07

标签: c# winforms ms-access

下面是我获取数据的查询,我的问题是,我将地址字段存储为

Address1%Address2%Address3

现在提取时我想将其作为Adress1 (newline) Adress2 (newline)Adress3获取 我怎么能这样做?

例如丹吉%ABC%普纳

作为Dange

ABC

普纳

OleDbDataAdapter da = new OleDbDataAdapter(@"SELECT FirstName,LastName,Address FROM Doctor_Master WHERE Type_of_Dr='" + typeofDr + "'", con))

2 个答案:

答案 0 :(得分:2)

遗憾的是,Microsoft.Jet.OLEDB.4.0提供商不像Replace()提供商那样支持Microsoft.ACE.OLEDB.12.0功能,否则对您来说会更容易。

我认为您必须正常获取Address字段并使用辅助函数将string转换为您想要的格式,如下所示:

public string GetBrokenLines(string address){
   return address.Replace("%","\r\n");
}
//instead of using the address directly, you just need to pass it into the GetBrokenLines
//method and get the expected result.

要使用适配器填充DataTable,请尝试以下操作:

public static DataTable GetRefDrList(string typeofDr, bool display){
  DataTable refDrListTable = new DataTable();
  refDrListTable.RowChanged += Format;
  //....
  da.Fill(refDrListTable);
  //....
}
bool suppressFormat;
private void Format(object sender, DataRowChangedEventArgs e){  
  if(suppressFormat) return;     
  suppressFormat = true;
  e.Row["Address"] = e.Row["Address"].ToString().Replace("%","\r\n");       
  suppressFormat = false;
}

答案 1 :(得分:1)

我会改变你存储数据的方式。您可以引入一个新表Doctor_Master_Address。如果每位医生只有一个地址,您还可以向Doctor_Master添加更多列。这样你就知道肯定会有街道名称,省名,邮政编码,国家等等。

如果您仍然选择使用值字段,则可以将该地址存储为该字段中的xml,以便轻松序列化数据。如果省略Address2然后解析Address1%Address3怎么办?如果它只是由'%'分隔,你怎么知道Address3代表什么?

如果您仍然选择使用%分隔的一个字段,请选中msdn以进行拆分字符串信息。