在調用存儲過程時,産生如下錯誤:
Parameter 'p_R_URL': No size set for variable length data type: String.
說明: 執行目前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤資訊,以了解有關該錯誤以及代碼中導緻錯誤的出處的詳細資訊。
異常詳細資訊: System.Exception: Parameter 'p_R_URL': No size set for variable length data type: String.
源錯誤: 行 67: catch(Exception ex)
行 68: {
行 69: throw new Exception(ex.Message);
行 70: //return false;
行 71: } |
源檔案: c:/inetpub/wwwroot/resource/datalay/dbresource.cs
行: 69
堆棧跟蹤: [Exception: Parameter 'p_R_URL': No size set for variable length data type: String.]
ReSource.DataLay.DbResource.Insert(String R_TITLE, String R_USE, String R_XKML, String R_GRLB, String R_WJLB, DateTime R_ADDTIME, String R_URL, String R_PRIVATE, String R_COMMONT) in c:/inetpub/wwwroot/resource/datalay/dbresource.cs:69
ReSource.BusLay.BusResource.Insert() in c:/inetpub/wwwroot/resource/buslay/busresource.cs:119
ReSource.WebLay.MYRESOURCEAdd.Insert(Object sender, EventArgs e) in c:/inetpub/wwwroot/resource/weblay/tjzy/myresourceadd.aspx.cs:80
System.EventHandler.Invoke(Object sender, EventArgs e) +0
System.Web.UI.WebControls.LinkButton.OnClick(EventArgs e) +108
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +138
System.Web.UI.Page.ProcessRequestMain() +1292
|
版本資訊: Microsoft .NET Framework 版本:1.1.4322.2300; ASP.NET 版本:1.1.4322.2300
很是郁悶,于是就打開Enterprise Library的源代碼進行調試。發現問題原來出現在 OracleCommandWrapper.cs檔案中的 如下函數:(從345 行開始)
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 private OracleParameter CreateParameter( string name, DbType dbType, int size, ParameterDirection direction, bool nullable, byte precision, byte scale, string sourceColumn, DataRowVersion sourceVersion, object value)
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 OracleParameter param = this.command.CreateParameter();
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.ParameterName = name;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.DbType = dbType;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Size = size;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Value = (value == null) ? DBNull.Value : value;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // modify parameter type and value for special cases
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 switch (dbType)
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // for Guid, change to value to byte array
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 case DbType.Guid:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 guidParameters.Add(param.ParameterName, "System.Guid");
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.OracleType = OracleType.Raw;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Size = 16;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // convert Guid value to byte array only if not null
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 if ((value is DBNull) || (value == null))
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Value = Convert.DBNull;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 else
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Value = ((Guid)value).ToByteArray();
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 break;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // case DbType.AnsiString:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // case DbType.AnsiStringFixedLength:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // case DbType.String:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // case DbType.StringFixedLength:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // // for empty string, set it to DBNull
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // if ((value == null) || (!(value is DBNull)) && ((string)value).Length == 0)
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // param.Value = Convert.DBNull;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // break;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 default:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 break;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Direction = direction;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.IsNullable = nullable;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Precision = precision;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Scale = scale;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.SourceColumn = sourceColumn;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.SourceVersion = sourceVersion;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 return param;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
可以看到,代碼中處理了傳入值為 NULL的情況。但是不知道為什麼把處理字元串參數等于 "" 的時候得語句給注釋掉了。于是乎,就更改源代碼,如下:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 private OracleParameter CreateParameter( string name, DbType dbType, int size, ParameterDirection direction, bool nullable, byte precision, byte scale, string sourceColumn, DataRowVersion sourceVersion, object value)
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 OracleParameter param = this.command.CreateParameter();
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.ParameterName = name;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.DbType = dbType;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Size = size;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Value = (value == null) ? DBNull.Value : value;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // modify parameter type and value for special cases
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 switch (dbType)
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // for Guid, change to value to byte array
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 case DbType.Guid:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 guidParameters.Add(param.ParameterName, "System.Guid");
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.OracleType = OracleType.Raw;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Size = 16;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // convert Guid value to byte array only if not null
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 if ((value is DBNull) || (value == null))
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Value = Convert.DBNull;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 else
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Value = ((Guid)value).ToByteArray();
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 break;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 case DbType.AnsiString:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 case DbType.AnsiStringFixedLength:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 case DbType.String:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 case DbType.StringFixedLength:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // for empty string, set it to DBNull
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 if ((value == null) || (!(value is DBNull)) && ((string)value).Length == 0)
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Value = Convert.DBNull;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 break;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 default:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 break;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Direction = direction;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.IsNullable = nullable;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Precision = precision;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Scale = scale;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.SourceColumn = sourceColumn;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.SourceVersion = sourceVersion;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 return param;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 問題的到了解決。但是不知道微軟的代碼為什麼把這個給注釋掉了。
後來,上網上看到Oracle 的一個論壇上的文章上有如下的描述:
Oracle will treat '' (empty string) as
NULL, and store as NULL anyway - better be prepared for it, and
treat it as such.
版本資訊: Microsoft .NET Framework 版本:1.1.4322.2300; ASP.NET 版本:1.1.4322.2300
很是郁悶,于是就打開Enterprise Library的源代碼進行調試。發現問題原來出現在 OracleCommandWrapper.cs檔案中的 如下函數:(從345 行開始)
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 private OracleParameter CreateParameter( string name, DbType dbType, int size, ParameterDirection direction, bool nullable, byte precision, byte scale, string sourceColumn, DataRowVersion sourceVersion, object value)
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 OracleParameter param = this.command.CreateParameter();
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.ParameterName = name;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.DbType = dbType;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Size = size;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Value = (value == null) ? DBNull.Value : value;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // modify parameter type and value for special cases
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 switch (dbType)
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // for Guid, change to value to byte array
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 case DbType.Guid:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 guidParameters.Add(param.ParameterName, "System.Guid");
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.OracleType = OracleType.Raw;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Size = 16;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // convert Guid value to byte array only if not null
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 if ((value is DBNull) || (value == null))
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Value = Convert.DBNull;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 else
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Value = ((Guid)value).ToByteArray();
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 break;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // case DbType.AnsiString:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // case DbType.AnsiStringFixedLength:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // case DbType.String:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // case DbType.StringFixedLength:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // // for empty string, set it to DBNull
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // if ((value == null) || (!(value is DBNull)) && ((string)value).Length == 0)
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // param.Value = Convert.DBNull;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // break;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 default:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 break;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Direction = direction;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.IsNullable = nullable;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Precision = precision;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Scale = scale;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.SourceColumn = sourceColumn;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.SourceVersion = sourceVersion;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 return param;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
可以看到,代碼中處理了傳入值為 NULL的情況。但是不知道為什麼把處理字元串參數等于 "" 的時候得語句給注釋掉了。于是乎,就更改源代碼,如下:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 private OracleParameter CreateParameter( string name, DbType dbType, int size, ParameterDirection direction, bool nullable, byte precision, byte scale, string sourceColumn, DataRowVersion sourceVersion, object value)
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 OracleParameter param = this.command.CreateParameter();
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.ParameterName = name;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.DbType = dbType;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Size = size;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Value = (value == null) ? DBNull.Value : value;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // modify parameter type and value for special cases
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 switch (dbType)
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // for Guid, change to value to byte array
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 case DbType.Guid:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 guidParameters.Add(param.ParameterName, "System.Guid");
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.OracleType = OracleType.Raw;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Size = 16;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // convert Guid value to byte array only if not null
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 if ((value is DBNull) || (value == null))
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Value = Convert.DBNull;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 else
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Value = ((Guid)value).ToByteArray();
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 break;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 case DbType.AnsiString:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 case DbType.AnsiStringFixedLength:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 case DbType.String:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 case DbType.StringFixedLength:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 // for empty string, set it to DBNull
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 if ((value == null) || (!(value is DBNull)) && ((string)value).Length == 0)
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 {
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Value = Convert.DBNull;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 break;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 default:
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 break;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Direction = direction;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.IsNullable = nullable;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Precision = precision;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.Scale = scale;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.SourceColumn = sourceColumn;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 param.SourceVersion = sourceVersion;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 return param;
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 }
Enterprise Library- Data Block使用oracle存儲過程,字元串參數傳入值為""時出現問題的解決 問題的到了解決。但是不知道微軟的代碼為什麼把這個給注釋掉了。
後來,上網上看到Oracle 的一個論壇上的文章上有如下的描述:
Oracle will treat '' (empty string) as
NULL, and store as NULL anyway - better be prepared for it, and
treat it as such.