遇到過一些比較奇葩的需求,對應奇葩的需求,所以就產生了一些奇葩的解決方案:
1)Sql Insert 時,字符中字符串不能含有單引號,否則就引起數據庫插入錯誤
例:在處理一個錯誤機制時,需要保存該API請求的Url,如果該字段為字符串 insert時單引號將會報錯。
所以用了一個比較笨的辦法,編譯,將單引號編譯成兩個單引號,使用的時候編譯回來 Url.Replace("'", "''");
2)需要存儲很大數量的字符串,而字符的數據量並不受我們控制,必須是來者不拒,像varchar2 varchar 對字符存儲是有限制的,並不符合需求,只有Clob 類型可以滿足我們的需求。
但是Clob 有一個問題就是,字符超過4000就會出現報錯,字符長度過長,雖然這個字符儲存量非常大,但是需要進行處理。
在網上找到兩種解決方案,一種使用參數的形式來,但是我不想使用函數或者是儲存過程,一種是拼接Update,就直接淘汰掉
使用了另外一種方法:
:req 類似於一個占位符
string strSql = string.Empty; OracleConnection con = new OracleConnection(conn); try { if (string.IsNullOrEmpty(request)) { request = " "; } strSql = @"insert into ""TableName""(""id"",""request"") values ('{0}',:req)"; strSql = string.Format(strSql, id); if (con.State == ConnectionState.Closed) { try { con.Open(); } catch (Exception e) { throw e; } } string sqlText = strSql; using (OracleCommand cmd = new OracleCommand(sqlText, con)) { OracleParameter oracleParameter1 = new OracleParameter("req", OracleType.Clob); oracleParameter1.Value = CommonUtil.FilteSQLStr(request); cmd.Parameters.Add(oracleParameter1); cmd.ExecuteNonQuery(); }
這樣就可以解決這個問題了