2010-08-16 42 views
2

我的代碼有問題。 我在Visual Studio 2010中使用了ASP.NET。十六進制值0x00,是一個無效的字符:用「」替換 0後仍然遇到問題「」

當我從數據庫檢索數據到Web服務中的數據表時,某些列給我一個空字符串數據。這導致了檢索和顯示XML的一些問題。我試圖把一個Replace ("","")來代替\0\0\0。這可以解決這個問題。但現在問題是,原始數據仍然顯示在XML中。原始數據是\0\0之前的數據。替換前,XML字段爲<VNDPNO></VNDPNO>,替換後變爲<VNDPNO />

我的問題是,如何隱藏原始數據。 當我打電話時,我不想要原始數據 它繼續在網頁瀏覽器<diffgr:before>中顯示。

我的源代碼是:

public DataTable GetItmSupDtls(string companycode, string itemCode, 
           string itemMajor, string itemMinor) 
{ 
    DataTable dsItmSupDtls; 
    //DataSet dsItmSupDtls = new DataSet(); 
    IDBManager dbManager = new DBManager(DataProvider.SqlServer); 
    dbManager.ConnectionString = _connString; 
    try 
    { 
     dbManager.Open(); 
     dbManager.CreateParameters(4); 
     dbManager.AddParameters(0, "@COYCDE", (object)companycode); 
     dbManager.AddParameters(1, "@ITMCDE", (object)itemCode); 
     dbManager.AddParameters(2, "@ITMMAJ", (object)itemMajor); 
     dbManager.AddParameters(3, "@ITMMIN", (object)itemMinor); 
     dsItmSupDtls = dbManager.ExecuteDataSet(
      CommandType.StoredProcedure, 
      Utilities.DatabaseName("DBPurchase") + ".dbo.ITMSUPINFO_STKBALENQUIRY" 
     ).Tables[0]; 
    } 

    catch (Exception ex) 
    { 
     throw ex; 
    } 

    finally 
    { 
     dbManager.Dispose(); 
    } 

    DataTable result = dsItmSupDtls.Clone(); 

    foreach (DataRow dtRow in dsItmSupDtls.Rows) 
    { 
     dtRow["VNDPNO"] = 
      dtRow["VNDPNO"].ToString().Replace("\0", ""); //"A"; // 
     result.ImportRow(dtRow); 
    } 
    return result; 
} 

請給我一些意見和建議。

非常感謝..

+0

有幾件事我不太在意。首先,爲什麼'Replace(「」,「」)'意味着要做任何事情?一秒鐘,「」變成「」的問題是什麼? - 這些在語義上是等同的。 – 2010-11-30 11:38:33

回答

0

您的信息被轉移的方式是通過diffgram。如果您使用ImportRow而不是InsertRow,我認爲歷史將隨之而來。由於InsertRow對於很多行可能更昂貴,因此您可能只想在值包含null時使用ImportRow。

+1

沒有什麼可以阻止與HTTP有效載荷一起發送空字符(實體被定義爲一系列八位字節,而不是字符,並且0x00八位字節很好 - 否則很多圖像無法發送),但U + 0000不能在XML數據中,無論是直接還是作爲字符實體(即使XML1.1放鬆對所使用字符的限制也不允許U + 0000被包含),所以把&#x0000;放入XML文檔使其格式不正確。 – 2010-11-30 11:36:26

+0

是的,你是對的,我非常感謝你抓住它。我將編輯迴應。 – James 2010-12-02 06:11:41

相關問題