2015-04-23 70 views
0

我在下面的代碼中更新了system.dbnull錯誤。某些值在數據庫中爲空,並在更新時返回null。我相信我應該設置默認值爲null,因此它會停止返回dbnull錯誤,但我不確定如何/在哪裏做到這一點。來自'system.dbnull'錯誤的轉換無效

const string sql = 
    @"UPDATE DoctorFacility SET PVId = @PVId, 
           Type = @Type, 
           Inactive = @Inactive, 
           Prefix = @Prefix, 
           First = @First, 
           Middle = @Middle, 
           Last = @Last, 
           Suffix = @Suffix, 
           OrgName = @OrgName, 
           OrgType = @OrgType, 
           ListName = @ListName, 
           Address1 = @Address1, 
           Address2 = @Address2, 
           City = @City, 
           State = @State, 
           Zip = @Zip, 
           Country = @Country, 
           Phone1 = @Phone1, 
           Phone1Type = @Phone1Type, 
           Phone2 = @Phone2, 
           Phone2Type = @Phone2Type, 
           EmailAddress = @EmailAddress, 
           PlaceOfServiceMId = @PlaceOfSErviceMId, 
           UPIN = @Upin, 
           SpecialtyMId = @SpecialtyMId, 
           DotId = @DotId, 
           NPI = @NPI, 
           CreatedBy = @CreatedBy, 
           LastModifiedBy = @LastModifiedBy 
     WHERE DotId = @DotId"; 
using (SqlDataAccessor dataAccessor = DataAccessorFactory.GetDataAccessor(Connection)) 
{ 
    string user = UserNameFactory.GetUsername(); 
    DaParameters parameters = new DaParameters(dataAccessor); 
    parameters.Add("@PVId", DateTimeHash(DateTime.Now)); 
    parameters.Add("@Type", (int)provider.ProviderType); 
    parameters.Add("@Inactive", provider.Inactive); 
    parameters.Add("@Prefix", provider.Prefix, DbType.AnsiString, 10); 
    parameters.Add("@First", provider.FirstName, DbType.AnsiString, 35); 
    parameters.Add("@Middle", provider.MiddleName, DbType.AnsiString, 30); 
    parameters.Add("@Last", provider.LastName, DbType.AnsiString, 60); 
    parameters.Add("@Suffix", provider.Suffix, DbType.AnsiString, 20); 
    parameters.Add("@OrgName", provider.OrgName, DbType.AnsiString, 60); 
    parameters.Add("@OrgType", provider.OrgType, DbType.AnsiString, 3); 
    parameters.Add("@ListName", provider.ListName, DbType.AnsiString, 160); 
    parameters.Add("@Address1", provider.Address1, DbType.AnsiString, 50); 
    parameters.Add("@Address2", provider.Address2, DbType.AnsiString, 50); 
    parameters.Add("@City", provider.City, DbType.AnsiString, 30); 
    parameters.Add("@State", provider.State, DbType.AnsiString, 3); 
    parameters.Add("@Zip", provider.Zip, DbType.AnsiString, 10); 
    parameters.Add("@Country", provider.Country, DbType.AnsiString, 30); 
    parameters.Add("@Phone1", provider.Phone1, DbType.AnsiString, 15); 
    parameters.Add("@Phone1Type", provider.Phone1Type, DbType.AnsiString, 25); 
    parameters.Add("@Phone2", provider.Phone2, DbType.AnsiString, 15); 
    parameters.Add("@Phone2Type", provider.Phone2Type, DbType.AnsiString, 25); 
    parameters.Add("@EmailAddress", provider.EmailAddress, DbType.AnsiString, 255); 
    parameters.Add("@PlaceOfServiceMId", provider.PlaceOfServiceMID); 
    parameters.Add("@UPIN", provider.UPIN, DbType.AnsiString, 50); 
    parameters.Add("@SpecialtyMId", provider.SpecialtyMID); 
    parameters.Add("@DotId", provider.DotID, DbType.AnsiString, 15); 
    parameters.Add("@NPI", provider.NPI, DbType.AnsiString, 80); 
    parameters.Add("@CreatedBy", user, DbType.AnsiString); 
    parameters.Add("@LastModifiedBy", user, DbType.AnsiString); 
    return dataAccessor.ExecuteIdentityInsert<Provider>(sql, parameters); 
} 

}

+0

你能提供你的錯誤的確切措辭?乍一看,我不清楚這有什麼問題。 我很好奇你爲什麼使用一個名爲ExecuteIdentityInsert的命令來執行更新。也許你對'dataAccessor'有錯誤的方法?該方法的名稱意味着它將用一個明確的標識值將一個'Provider'插入數據庫。 –

+0

請提供即將到來的完整例外消息。並且現在在IDE中有非常好的事情 - **調試器** –

+0

如果您覺得答案可以解決問題,請單擊綠色複選標記將其標記爲「接受」。這有助於將注意力集中在仍然沒有答案的舊版SO上。如果我的答案沒有解決您的問題,我很樂意提供幫助。 – FolksymAndrew

回答

1

如果這是在ADO.NET運行,它不知道如何.NET空值轉換爲SQL Server的空值。

嘗試空凝聚任何可疑的空輸入DBNull.Value System命名空間,就像這樣:

parameters.Add("@First", provider.FirstName ?? DBNull.Value, DbType.AnsiString, 35);

相關問題