PDA

View Full Version : Column does not allow nulls


omicrondemo
11-03-2007, 12:50 AM
Hi,

This should be straight forward, but I've searched high and low on the net.

I have a FORM which allows me to INSERT data, SQL Server 2005 backend. I populate the all the mandatory fields.

But when I click on the Insert button, it won't let me save and says:

Column 'PERSONAL_ID' does not allow nulls

I'm using tableadapters, business logic layers etc. and pausing clearly shows that the values from the form are being passed to the procedure that I have created 'AddNewRecord'. And PERSONAL_ID is definitely not NULL!

It fails on

Line 971: Me.Rows.Add(row)

PERSONAL_ID is a primary key which I generate. The pause also shows that for PERSONAL_ID it says ' {'Conversion from type 'DBNull' to type 'String' is not valid.'}

Function AddNewRecord looks like this:

<System.ComponentModel.DataObjectMethodAttribute(Sy stem.ComponentModel.DataObjectMethodType.Insert, True)> _
Public Function AddNewRecord(ByVal PERSONAL_ID As String, ByVal SURNAME As String, ByVal CHRISTIAN_NAME As String, ByVal SEX As String, _
ByVal FAMILY_POSITION As String, ByVal FAMILY_ID As String, ByVal ADDRESS_1 As String, ByVal ADDRESS_2 As String, _
ByVal ADDRESS_3 As String, ByVal ADDRESS_4 As String, ByVal ADDRESS_5 As String, ByVal ADDRESS_6 As String, ByVal POSTCODE As String, ByVal COUNTRY As String, ByVal ORG_ID As String) As Boolean
' create a new details row instance
Dim details As New smDetails.smTbl_DetailsIDDataTable
Dim detail As smDetails.smTbl_DetailsIDRow = details.NewsmTbl_DetailsIDRow

details.AddsmTbl_DetailsIDRow(detail)
.
.
.

Any pointers in the right direction would be appreciated. I'm not sure if using .NET 3.5 is a factor.

Thanks in advance

Tushar

omicrondemo
11-03-2007, 01:13 AM
ps my formview code is this:

<InsertItemTemplate>
PERSONAL_ID:
<asp:TextBox ID='PERSONAL_IDTextBox' runat='server'
Text='<%# Bind('PERSONAL_ID') %>' AutoPostBack='True' />
[b]
SURNAME:
<asp:TextBox ID='SURNAMETextBox' runat='server' Text='<%# Bind('SURNAME') %>'
AutoPostBack='True' />
[b]
CHRISTIAN_NAME:
<asp:TextBox ID='CHRISTIAN_NAMETextBox' runat='server'
Text='<%# Bind('CHRISTIAN_NAME') %>' />
[b]
SEX:
<asp:TextBox ID='SEXTextBox' runat='server' Text='<%# Bind('SEX') %>' />
[b]
FAMILY_POSITION:
<asp:TextBox ID='FAMILY_POSITIONTextBox' runat='server'
Text='<%# Bind('FAMILY_POSITION') %>' />
[b]
FAMILY_ID:
<asp:TextBox ID='FAMILY_IDTextBox' runat='server'
Text='<%# Bind('FAMILY_ID') %>' />
[b]
ADDRESS_1:
<asp:TextBox ID='ADDRESS_1TextBox' runat='server'
Text='<%# Bind('ADDRESS_1') %>' />
[b]
ADDRESS_2:
<asp:TextBox ID='ADDRESS_2TextBox' runat='server'
Text='<%# Bind('ADDRESS_2') %>' />
[b]
ADDRESS_3:
<asp:TextBox ID='ADDRESS_3TextBox' runat='server'
Text='<%# Bind('ADDRESS_3') %>' />
[b]
ADDRESS_4:
<asp:TextBox ID='ADDRESS_4TextBox' runat='server'
Text='<%# Bind('ADDRESS_4') %>' />
[b]
ADDRESS_5:
<asp:TextBox ID='ADDRESS_5TextBox' runat='server'
Text='<%# Bind('ADDRESS_5') %>' />
[b]
ADDRESS_6:
<asp:TextBox ID='ADDRESS_6TextBox' runat='server'
Text='<%# Bind('ADDRESS_6') %>' />
[b]
POSTCODE:
<asp:TextBox ID='POSTCODETextBox' runat='server'
Text='<%# Bind('POSTCODE') %>' />
[b]
COUNTRY:
<asp:TextBox ID='COUNTRYTextBox' runat='server' Text='<%# Bind('COUNTRY') %>' />
[b]
ORG_ID:
<asp:TextBox ID='ORG_IDTextBox' runat='server' Text='<%# Bind('ORG_ID') %>' />
[b]
<asp:LinkButton ID='InsertButton' runat='server' CausesValidation='True'
CommandName='Insert' Text='Insert' />
<asp:LinkButton ID='InsertCancelButton' runat='server'
CausesValidation='False' CommandName='Cancel' Text='Cancel' />
</InsertItemTemplate>

/emoticons/rolleyes.gif

omicrondemo
11-06-2007, 03:14 AM
I've found the solution is to replace

details.AddsmTbl_DetailsIDRow(detail)

in Function AddNewRecord in the BLL

with

Adapter1.InsertQuery_TAM(PERSONAL_ID, SURNAME, CHRISTIAN_NAME, SEX, _
FAMILY_POSITION, FAMILY_ID, ADDRESS_1, ADDRESS_2, _
ADDRESS_3, ADDRESS_4, ADDRESS_5, ADDRESS_6, POSTCODE, COUNTRY, ORG_ID)

i.e. my user defined insert query.

For some reason adding a new row directly causes the SELECT routine to run, which expects a value for the PERSONAL_ID (primary key). I'm sure I'll discover why in due course.

Also the above is not really very clear in the tutorials.

HTH

Tushar /emoticons/yeah.gif