2014-01-30 3 views
0

Я использую VB6 и im, пытающиеся вставить значение NULL в базу данных, если текстовое поле остается пустым. Когда я это делаю, «NULL» вставляется в базу данных, которая содержит только NULL. Как я могу это исправить?Вставка пустого текста из текстового поля как NULL

Dim ctl As Control 
For Each ctl In Me.Controls 
    If TypeOf ctl Is TextBox Then 
     If ctl.Text = "" Then 
     ctl.Text = "NULL" 
     End If 
    End If 
Next 

Set prm = cmdDlrID.CreateParameter("@ContractNumberField", adVarChar, adParamInput, 50, txtContNum.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@ContractSuffix", adVarChar, adParamInput, 50, txtContSfx.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@CustomerLastName", adVarChar, adParamInput, 50, txtCustLstNme.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@CustomerFirstName", adVarChar, adParamInput, 50, txtCustFstNme.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@Last6OfVin", adVarChar, adParamInput, 10, txtVin6.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@DealershipName", adVarChar, adParamInput, 100, cmbDealerName.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@ClaimNumber", adVarChar, adParamInput, 50, txtClaimNumber.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@PortalClaimNumber", adVarChar, adParamInput, 50, txtPortalClaimNum.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@RONumber", adVarChar, adParamInput, 50, txtRONumber.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@ContractID", adVarChar, adParamInput, 50, txtContCode.Text) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@LookUpUser", adVarChar, adParamInput, 50, username) 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@LookUpTime", adVarChar, adParamInput, 50, "CurrentDate") 
cmdDlrID.Parameters.Append prm 
Set prm = cmdDlrID.CreateParameter("@Department", adVarChar, adParamInput, 50, "Department") 
cmdDlrID.Parameters.Append prm 


cmdDlrID.Execute 

ХП

ALTER PROCEDURE [dbo].[InsertLookupLog] 
-- Add the parameters for the stored procedure here 
@ContractNumberField varchar(50) , 
@ContractSuffix varchar(50), 
@CustomerLastName varchar(50), 
@CustomerFirstName varchar(50), 
@Last6ofVIN varchar(10), 
@DealerShipName varchar(100), 
@ClaimNumber varchar(50), 
@PortalClaimNumber varchar(50), 
@RONumber varchar(50), 
@ContractId varchar(50), 
@LookUpUser varchar(50), 
@LookUpTime varchar(50), 
@Department varchar(50) 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

Insert Into tblContractLookupLog (ContractNumberField,ContractSuffix, CustomerLastName, CustomerFirstName,Last6ofVin,DealershipName,ClaimNumber, PortalClaimNumber, RONumber, ContractID, LookUpUser,LookUpTime,Department) Values (@ContractNumberField,@ContractSuffix,@CustomerLastName,@CustomerFirstName,@Last6ofVin,@DealershipName,@ClaimNumber,@PortalClaimNumber,@RONumber, @ContractID, @LookUpUser,@LookUpTime,@Department) 
END 

ответ

2

Проблема здесь вы устанавливаете TextBox в строковый литерал "NULL" не значение NULL. Вместо использования String вам нужно будет использовать Nothing. Вы могли бы это абстрактный к функции

Function GetDbValue(ByVal tb) 
    If tb.Text = "" Then 
    Return Nothing 
    Else 
    Return tb.Text 
    End If 
End Function 

Затем снимите петлю For и изменить код создания параметра следующим

Set prm = cmdDlrID.CreateParameter("@ContractNumberField", adVarChar, adParamInput, 50, GetDbValue(txtContNum) 

Примечание: Я не 100% уверен, что Nothing переведет к NULL Значение DB в VB6, но я уверен, что это так. Использование строкового литерала "NULL" определенно не будет работать

+0

да ничего не возвращайся, красный, так плохо смотри, что изменить, что – Zingo

0

Поскольку вы используете хранимая процедура, вы можете изменить процедуру для вставки null, если это значение является пустой строкой. Например:

Insert Into tblContractLookupLog (ContractNumberField,More columns here) 
Values (NullIf(@ContractNumberField, ''),More columns here) 

Функция NullIf вернет NULL, если значение обоих параметров одинаковое. В этом случае, если у вас есть пустая строка для @ContractNumberField, функция NULLIF вернет NULL.

После внесения изменений в хранимую процедуру вы можете просто передать пустую строку в хранимую процедуру.

Смежные вопросы