TimeStamp field, help needed

J

Jim H

I am attempting to update a Database Table thru a DataAdapter using a DataSet.

I get this error:
"Cannot insert a non-null value into a timestamp column. Use INSERT with a column list or with
a default of NULL for the timestamp column."


This is my table definition:
CREATE TABLE [dbo].[FieldNameXRef] (
[FNXApplication] [varchar] (5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[FNXOriginalName] [varchar] (6) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[FNXSource] [varchar] (12) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[FNXNewName] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[FNXComment] [varchar] (48) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[FNXTimeStamp] [timestamp] NOT NULL ,
[FNXSequential] [int] IDENTITY (1, 1) NOT NULL
) ON [PRIMARY]
GO


And, in the program I have:
if ( myDataRow == null ) // If the row was not found, add it to the DataTable
{
dr = dtFieldNameXRef.NewRow(); // Create new Row in dtFieldNameXRef

dr[ "FNXApplication" ] = selectedApp; // Set Comment Field Value
dr[ "FNXOriginalName" ] = label; // Set Label Field Value
dr[ "FNXSource" ] = name; // Set Source Field Value (filename)
dr[ "FNXComment" ] = comment; // Set Comment Field Value

dtFieldNameXRef.Rows.Add( dr ); // Add the new Row to the DataTable
}

Note that in the code shown, I have not initialized the FNXTimeStamp field. I have also tried
initializing the FNXTimeStamp field to null, NULL, DB.NULL, new DBNull(), DBNull.Value -- and
all produce one error or another.

TIA, Jim Holloman
 
J

Jim Hughes

Read the error! "or with a default of NULL for the timestamp column."

Therefore change the table definition!
"[FNXTimeStamp] [timestamp] NULL ,"
 
J

Jim H

Thanks, Jim, for the reply.

I made the change to allow "NULL" in the TimeStamp Column and still get the same error.

My table now looks like this (as the script generator produces it):

CREATE TABLE [dbo].[FieldNameXRef] (
[FNXApplication] [varchar] (5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[FNXOriginalName] [varchar] (6) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[FNXSource] [varchar] (12) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[FNXNewName] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[FNXComment] [varchar] (48) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[FNXTimeStamp] [timestamp] NULL ,
[FNXDateTime] [datetime] NULL ,
[FNXSequential] [int] IDENTITY (1, 1) NOT NULL
) ON [PRIMARY]
GO


Read the error! "or with a default of NULL for the timestamp column."

Therefore change the table definition!
"[FNXTimeStamp] [timestamp] NULL ,"


Jim H said:
I am attempting to update a Database Table thru a DataAdapter using a
DataSet.

I get this error:
"Cannot insert a non-null value into a timestamp column. Use INSERT with
a column list or with
a default of NULL for the timestamp column."


This is my table definition:
CREATE TABLE [dbo].[FieldNameXRef] (
[FNXApplication] [varchar] (5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT
NULL ,
[FNXOriginalName] [varchar] (6) COLLATE SQL_Latin1_General_CP1_CI_AS NOT
NULL ,
[FNXSource] [varchar] (12) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
,
[FNXNewName] [varchar] (32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
,
[FNXComment] [varchar] (48) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
,
[FNXTimeStamp] [timestamp] NOT NULL ,
[FNXSequential] [int] IDENTITY (1, 1) NOT NULL
) ON [PRIMARY]
GO


And, in the program I have:
if ( myDataRow == null ) // If the row was not found, add it to the
DataTable
{
dr = dtFieldNameXRef.NewRow(); // Create new Row in
dtFieldNameXRef

dr[ "FNXApplication" ] = selectedApp; // Set Comment Field Value
dr[ "FNXOriginalName" ] = label; // Set Label Field Value
dr[ "FNXSource" ] = name; // Set Source Field Value
(filename)
dr[ "FNXComment" ] = comment; // Set Comment Field Value

dtFieldNameXRef.Rows.Add( dr ); // Add the new Row to the DataTable
}
 
J

Jim H

It is apparently a bug. The DataAdapter Wizard generates an InsertCommand property that includes
timestamp columns. See the following Knowledge Base article:

http://support.microsoft.com/?kbid=815543

I am surprised to find a glaring bug like this in Visual Studio 2003. The timestamp type is a
read-only type. I have VS Ver. 7.1.3088 and ADO.Net Ver. 1.1.4322.

I have been unable to understand, or follow, Step 5 of the Resolution, and thus have concluded that
I will not be able to use Timestamp columns in my Databases. That, in turn, disrupts my planned
approach to concurrency checking.

Can someone confirm that this has been fixed in VS2005?

Jim Holloman
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top