2014-07-18 2 views
0

OOB Silverlight 응용 프로그램을 개발 중이며 COM Toolkit (http://silverlightcom.codeplex.com)을 사용하는 언어는 Visual Basic (VB)입니다. 이 팩을 사용하면 ADO.NET을 사용하여 내 응용 프로그램을 Microsoft SQL Server 데이터베이스와 연결할 수 있습니다. 그것은 작동하지만 null 값을 매개 변수에 삽입하려고하면 예외가 throw됩니다 : 0x800A0BB9 (http://prntscr.com/43zwyr).AddWithValue()가 DBNull.Value (Exception 0x800A0BB9)을 허용하지 않습니다. - Silverlight - VB

내 코드 (내가 가장 간단한 스트레치를 게시 할 예정입니다)입니다 :

Private Const SqlCreateJob As String = "insert into Cargos(Nome_carg, Desc_carg) values(?, ?)" 

    Public Shared Sub CreateJob(ByVal j As Job) 

     Dim conn As AdoConnection = DbUtil.GetConn 
     Dim cmd As AdoCommand = conn.CreateCommand 
     cmd.CommandText = SqlCreateJob 

     cmd.Parameters.AddWithValue("Nome_carg", j.Name) 
     cmd.Parameters.AddWithValue("Desc_carg", j.Desc) 

     For Each p As AdoParameter In cmd.Parameters 
      If p.Value = Nothing Then 
       p.Value = DBNull.Value 
      End If 
     Next 

     cmd.ExecuteNonQuery() 
     conn.Close() 

    End Sub 

그리고 클래스 작업 :

Public Class Job 
    Property Code() As Integer 
    Property Name() As String 
    Property Desc() As String 
End Class 

값 제품 설명은, 직장에서, 널 (null)이 될 수 있습니다. 그리고 만약 내가 넣으면 cmd.Parameters.AddWithValue("Desc_carg", DBNull.Value) 그것은 여전히 ​​작동하지 않습니다. 내가 무엇을 할 수 있을지? .Message

System.Runtime.InteropServices.COMException (0x800A0BB9): Exception from HRESULT: 0x800A0BB9 ---> MS.Internal.ComAutomation.ComAutomationObjectException: The arguments are incorrect, are out of acceptable range, or are in conflict.(Source=ADODB.Parameter) (HelpFile=C:\WINDOWS\HELP\ADO270.CHM#1240641) em MS.Internal.ComAutomation.ComAutomationNative.CheckInvokeHResult(UInt32 hr, String memberName, String exceptionSource, String exceptionDescription, String exceptionHelpFile, UInt32 exceptionHelpContext) em MS.Internal.ComAutomation.ComAutomationNative.Invoke(Boolean tryInvoke, String memberName, ComAutomationInvokeType invokeType, ComAutomationInteropValue[] rgParams, IntPtr nativePeer, ComAutomationInteropValue& returnValue) em MS.Internal.ComAutomation.ComAutomationObject.InvokeImpl(Boolean tryInvoke, String name, ComAutomationInvokeType invokeType, Object& returnValue, Object[] args) em MS.Internal.ComAutomation.ComAutomationObject.Invoke(String name, ComAutomationInvokeType invokeType, Object[] args) em System.Runtime.InteropServices.Automation.AutomationMetaObjectProvider.TrySetMember(SetMemberBinder binder, Object value) em System.Runtime.InteropServices.Automation.AutomationMetaObjectProviderBase.<.cctor>b__3(Object obj, SetMemberBinder binder, Object value) em CallSite.Target(Closure , CallSite , Object , Int32) em System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1) em CallSite.Target(Closure , CallSite , Object , Int32) em ComToolkit.Data.AdoParameter.set_Type(DbType value) em ComToolkit.Data.AdoParameter..ctor(Object adoParameter, String name, Object value) em CallSite.Target(Closure , CallSite , Type , Object , String , Object) em System.Dynamic.UpdateDelegates.UpdateAndExecute4[T0,T1,T2,T3,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3) em CallSite.Target(Closure , CallSite , Type , Object , String , Object) em ComToolkit.Data.AdoCommand.CreateParameter(String name, Object value) em ComToolkit.Data.AdoParameterCollection.AddWithValue(String name, Object value) em Corporativo.Dao.CargoDao.AddParameters(AdoCommand cmd, Cargo c) em Corporativo.Dao.CargoDao.CriarCargo(Cargo c) em Corporativo.UCCadCargos.Create()  

그리고 : HRESULT에서

예외 : 0x800A0BB9

+0

링크를 게시하는 대신 예외를 복사하여 붙여 넣으십시오. 링크가 더 이상 작동하지 않는 경우 나중에이 질문이 다른 사람들에게 도움이 될 수 있습니다. –

+0

네, 문제 없습니다. –

+0

'Nome_carg'과'Desc_carg' 둘 다 널값을 허용합니까? –

답변

1

을합니다 (제품 설명이 명령이 작동을 NULL이 아닌 경우) Exception.ToString는 여기

값이 NULL 또는 반일 경우 AddWithValue을 사용하지 않아야합니다. AddWithValue은 값에서 매개 변수의 데이터 유형을 유추하지만 값이 NULL이면 유 형을 유추 할 수 없습니다. 이 경우 Add을 사용해야하며 데이터 형식을 명시 적으로 지정하고 Value 속성을 설정해야합니다.