473,224 Members | 1,434 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,224 software developers and data experts.

ObjectDataSource - problem inserting empty field into stored proce

I'm using an ObjectDataSource with a stored procedure and am getting the
following error when trying to update (ExecuteNonQuery):

System.Data.SqlClient.SqlException: Procedure or Function 'UpdateRegistrant'
expects parameter '@EMail', which was not supplied.

The field value was null in the database and not changed in the FormView so
is null going back into the stored procedure. I'm stumped and would greatly
appreciate any suggestions.

TypeName code from RegistrantDB:
public void UpdateRegistrant(
RegistrantDetails reg
) {
SqlConnection con = new SqlConnection( connectionString );
SqlCommand cmd = new SqlCommand( "UpdateRegistrant", con );
cmd.CommandType = CommandType.StoredProcedure;
...
cmd.Parameters.Add( new SqlParameter( "@EMail", SqlDbType.NVarChar, 25 ) );
cmd.Parameters["@EMail"].Value = reg.EMail;
...
con.Open();
cmd.ExecuteNonQuery();
con.Close();

code from my DataObjectTypeName RegistrantDetails:
protected string eMail = String.Empty;
public string EMail
{
get {return eMail;}
set {eMail = value;}
}

My stored procedure UpdateRegistrant:
CREATE PROCEDURE [dbo].UpdateRegistrant
@RegistrantId int,
@FirstName nvarchar(25),
@MI nvarchar(3),
@LastName nvarchar(25),
@EMail nvarchar(25),
...
AS
UPDATE [dbo].[Registrants] SET
[FirstName] = @FirstName,
[MI] = @MI,
[LastName] = @LastName,
[email] = @EMail,
...
WHERE
[RegistrantId] = @RegistrantId

Apr 7 '06 #1
7 3406
Dabbler,

When you add a parameter to your sqlcommand with the value null or even an
empty string, the stored procedure will think the parameter is not supplied.

There are two ways to solve your problem:
1: Alter your stored procedure to allow the Email parameter (and maybe
others) to be null:

CREATE PROCEDURE [dbo].UpdateRegistrant
@RegistrantId int,
@FirstName nvarchar(25),
@MI nvarchar(3),
@LastName nvarchar(25),
@EMail nvarchar(25) = null,
...
AS

2: When passing the parameter to the sqlcommand ensure that the value is not
null or an empty string:
if (reg.EMail == null || reg.EMail.Length ==0)
reg.EMail = "dummy value";
cmd.Parameters["@EMail"].Value = reg.EMail;

Good luck.

Regards, Dustin.

"Dabbler" wrote:
I'm using an ObjectDataSource with a stored procedure and am getting the
following error when trying to update (ExecuteNonQuery):

System.Data.SqlClient.SqlException: Procedure or Function 'UpdateRegistrant'
expects parameter '@EMail', which was not supplied.

The field value was null in the database and not changed in the FormView so
is null going back into the stored procedure. I'm stumped and would greatly
appreciate any suggestions.

TypeName code from RegistrantDB:
public void UpdateRegistrant(
RegistrantDetails reg
) {
SqlConnection con = new SqlConnection( connectionString );
SqlCommand cmd = new SqlCommand( "UpdateRegistrant", con );
cmd.CommandType = CommandType.StoredProcedure;
...
cmd.Parameters.Add( new SqlParameter( "@EMail", SqlDbType.NVarChar, 25 ) );
cmd.Parameters["@EMail"].Value = reg.EMail;
...
con.Open();
cmd.ExecuteNonQuery();
con.Close();

code from my DataObjectTypeName RegistrantDetails:
protected string eMail = String.Empty;
public string EMail
{
get {return eMail;}
set {eMail = value;}
}

My stored procedure UpdateRegistrant:
CREATE PROCEDURE [dbo].UpdateRegistrant
@RegistrantId int,
@FirstName nvarchar(25),
@MI nvarchar(3),
@LastName nvarchar(25),
@EMail nvarchar(25),
...
AS
UPDATE [dbo].[Registrants] SET
[FirstName] = @FirstName,
[MI] = @MI,
[LastName] = @LastName,
[email] = @EMail,
...
WHERE
[RegistrantId] = @RegistrantId

Apr 7 '06 #2
Hi Dustin

Thanks for that clarification. I'm wondering what the best practices is for
this, as I've been pouring over other developers ObjectDataSource examples
using business classes and stored procedures and nowhere do I see a hint of
coding to deal with null values.

Do people typically initialize db table columns to "" instead of leaving
them null?

Thanks again for this info, I have 50+ columns in this table and form so I
think the easiest thing to do is renegerate the stored procedure (using
Codesmith) with null as default value. I'm really loosing my interest in
ObjectDataSource, given the gray hair it's given me ;)

"Dustin van de Sande" wrote:
Dabbler,

When you add a parameter to your sqlcommand with the value null or even an
empty string, the stored procedure will think the parameter is not supplied.

There are two ways to solve your problem:
1: Alter your stored procedure to allow the Email parameter (and maybe
others) to be null:

CREATE PROCEDURE [dbo].UpdateRegistrant
@RegistrantId int,
@FirstName nvarchar(25),
@MI nvarchar(3),
@LastName nvarchar(25),
@EMail nvarchar(25) = null,
...
AS

2: When passing the parameter to the sqlcommand ensure that the value is not
null or an empty string:
if (reg.EMail == null || reg.EMail.Length ==0)
reg.EMail = "dummy value";
cmd.Parameters["@EMail"].Value = reg.EMail;

Good luck.

Regards, Dustin.

"Dabbler" wrote:
I'm using an ObjectDataSource with a stored procedure and am getting the
following error when trying to update (ExecuteNonQuery):

System.Data.SqlClient.SqlException: Procedure or Function 'UpdateRegistrant'
expects parameter '@EMail', which was not supplied.

The field value was null in the database and not changed in the FormView so
is null going back into the stored procedure. I'm stumped and would greatly
appreciate any suggestions.

TypeName code from RegistrantDB:
public void UpdateRegistrant(
RegistrantDetails reg
) {
SqlConnection con = new SqlConnection( connectionString );
SqlCommand cmd = new SqlCommand( "UpdateRegistrant", con );
cmd.CommandType = CommandType.StoredProcedure;
...
cmd.Parameters.Add( new SqlParameter( "@EMail", SqlDbType.NVarChar, 25 ) );
cmd.Parameters["@EMail"].Value = reg.EMail;
...
con.Open();
cmd.ExecuteNonQuery();
con.Close();

code from my DataObjectTypeName RegistrantDetails:
protected string eMail = String.Empty;
public string EMail
{
get {return eMail;}
set {eMail = value;}
}

My stored procedure UpdateRegistrant:
CREATE PROCEDURE [dbo].UpdateRegistrant
@RegistrantId int,
@FirstName nvarchar(25),
@MI nvarchar(3),
@LastName nvarchar(25),
@EMail nvarchar(25),
...
AS
UPDATE [dbo].[Registrants] SET
[FirstName] = @FirstName,
[MI] = @MI,
[LastName] = @LastName,
[email] = @EMail,
...
WHERE
[RegistrantId] = @RegistrantId

Apr 7 '06 #3
Hi Dabbler,

I normally use the objectdatasource so I can use a typed dataset without
stored procedures.
The stored procedures I normally use on heavy calculation jobs or multiple
db updates, not single records.
However I don't believe it's a problem to have your nullable fields as a
nullable parameter in a stored procedure.

Good luck.

"Dabbler" wrote:
Hi Dustin

Thanks for that clarification. I'm wondering what the best practices is for
this, as I've been pouring over other developers ObjectDataSource examples
using business classes and stored procedures and nowhere do I see a hint of
coding to deal with null values.

Do people typically initialize db table columns to "" instead of leaving
them null?

Thanks again for this info, I have 50+ columns in this table and form so I
think the easiest thing to do is renegerate the stored procedure (using
Codesmith) with null as default value. I'm really loosing my interest in
ObjectDataSource, given the gray hair it's given me ;)

"Dustin van de Sande" wrote:
Dabbler,

When you add a parameter to your sqlcommand with the value null or even an
empty string, the stored procedure will think the parameter is not supplied.

There are two ways to solve your problem:
1: Alter your stored procedure to allow the Email parameter (and maybe
others) to be null:

CREATE PROCEDURE [dbo].UpdateRegistrant
@RegistrantId int,
@FirstName nvarchar(25),
@MI nvarchar(3),
@LastName nvarchar(25),
@EMail nvarchar(25) = null,
...
AS

2: When passing the parameter to the sqlcommand ensure that the value is not
null or an empty string:
if (reg.EMail == null || reg.EMail.Length ==0)
reg.EMail = "dummy value";
cmd.Parameters["@EMail"].Value = reg.EMail;

Good luck.

Regards, Dustin.

"Dabbler" wrote:
I'm using an ObjectDataSource with a stored procedure and am getting the
following error when trying to update (ExecuteNonQuery):

System.Data.SqlClient.SqlException: Procedure or Function 'UpdateRegistrant'
expects parameter '@EMail', which was not supplied.

The field value was null in the database and not changed in the FormView so
is null going back into the stored procedure. I'm stumped and would greatly
appreciate any suggestions.

TypeName code from RegistrantDB:
public void UpdateRegistrant(
RegistrantDetails reg
) {
SqlConnection con = new SqlConnection( connectionString );
SqlCommand cmd = new SqlCommand( "UpdateRegistrant", con );
cmd.CommandType = CommandType.StoredProcedure;
...
cmd.Parameters.Add( new SqlParameter( "@EMail", SqlDbType.NVarChar, 25 ) );
cmd.Parameters["@EMail"].Value = reg.EMail;
...
con.Open();
cmd.ExecuteNonQuery();
con.Close();

code from my DataObjectTypeName RegistrantDetails:
protected string eMail = String.Empty;
public string EMail
{
get {return eMail;}
set {eMail = value;}
}

My stored procedure UpdateRegistrant:
CREATE PROCEDURE [dbo].UpdateRegistrant
@RegistrantId int,
@FirstName nvarchar(25),
@MI nvarchar(3),
@LastName nvarchar(25),
@EMail nvarchar(25),
...
AS
UPDATE [dbo].[Registrants] SET
[FirstName] = @FirstName,
[MI] = @MI,
[LastName] = @LastName,
[email] = @EMail,
...
WHERE
[RegistrantId] = @RegistrantId

Apr 7 '06 #4
Dustin

What happens if I have a datetime field which is not on my form, but is in
my object class and is pushed into the stored procedure. If I set the stored
procedure to JoinDate = null will it simply ignore this column in the update
or will it replace the value with null?

Thanks again, I think the fog is lifting... ;)

"Dustin van de Sande" wrote:
Hi Dabbler,

I normally use the objectdatasource so I can use a typed dataset without
stored procedures.
The stored procedures I normally use on heavy calculation jobs or multiple
db updates, not single records.
However I don't believe it's a problem to have your nullable fields as a
nullable parameter in a stored procedure.

Good luck.

"Dabbler" wrote:
Hi Dustin

Thanks for that clarification. I'm wondering what the best practices is for
this, as I've been pouring over other developers ObjectDataSource examples
using business classes and stored procedures and nowhere do I see a hint of
coding to deal with null values.

Do people typically initialize db table columns to "" instead of leaving
them null?

Thanks again for this info, I have 50+ columns in this table and form so I
think the easiest thing to do is renegerate the stored procedure (using
Codesmith) with null as default value. I'm really loosing my interest in
ObjectDataSource, given the gray hair it's given me ;)

"Dustin van de Sande" wrote:
Dabbler,

When you add a parameter to your sqlcommand with the value null or even an
empty string, the stored procedure will think the parameter is not supplied.

There are two ways to solve your problem:
1: Alter your stored procedure to allow the Email parameter (and maybe
others) to be null:

CREATE PROCEDURE [dbo].UpdateRegistrant
@RegistrantId int,
@FirstName nvarchar(25),
@MI nvarchar(3),
@LastName nvarchar(25),
@EMail nvarchar(25) = null,
...
AS

2: When passing the parameter to the sqlcommand ensure that the value is not
null or an empty string:
if (reg.EMail == null || reg.EMail.Length ==0)
reg.EMail = "dummy value";
cmd.Parameters["@EMail"].Value = reg.EMail;

Good luck.

Regards, Dustin.

"Dabbler" wrote:

> I'm using an ObjectDataSource with a stored procedure and am getting the
> following error when trying to update (ExecuteNonQuery):
>
> System.Data.SqlClient.SqlException: Procedure or Function 'UpdateRegistrant'
> expects parameter '@EMail', which was not supplied.
>
> The field value was null in the database and not changed in the FormView so
> is null going back into the stored procedure. I'm stumped and would greatly
> appreciate any suggestions.
>
> TypeName code from RegistrantDB:
> public void UpdateRegistrant(
> RegistrantDetails reg
> ) {
> SqlConnection con = new SqlConnection( connectionString );
> SqlCommand cmd = new SqlCommand( "UpdateRegistrant", con );
> cmd.CommandType = CommandType.StoredProcedure;
> ...
> cmd.Parameters.Add( new SqlParameter( "@EMail", SqlDbType.NVarChar, 25 ) );
> cmd.Parameters["@EMail"].Value = reg.EMail;
> ...
> con.Open();
> cmd.ExecuteNonQuery();
> con.Close();
>
> code from my DataObjectTypeName RegistrantDetails:
> protected string eMail = String.Empty;
> public string EMail
> {
> get {return eMail;}
> set {eMail = value;}
> }
>
> My stored procedure UpdateRegistrant:
> CREATE PROCEDURE [dbo].UpdateRegistrant
> @RegistrantId int,
> @FirstName nvarchar(25),
> @MI nvarchar(3),
> @LastName nvarchar(25),
> @EMail nvarchar(25),
> ...
> AS
> UPDATE [dbo].[Registrants] SET
> [FirstName] = @FirstName,
> [MI] = @MI,
> [LastName] = @LastName,
> [email] = @EMail,
> ...
> WHERE
> [RegistrantId] = @RegistrantId
>

Apr 7 '06 #5
Dabbler,

If you have the date in your update statement it will update the value with
null. You can create a script to bypass this, but I don't think you should.
If @Joindate is null
begin
update ....
end
else
begin
update
end

Another way could be to generate a sql statement in a varchar to update the
fields supplied:
declare @sqlstring varchar(2000)
set @sqlstring = 'Update tbl_table set '
if @JoinDate is null
begin
set @sqlstring = @sqlstring + 'joindate='+ @JoinDate --Probably you will
have to cast this
end
--Other params
exec @sqlstring

Beware of the permissions however. When you use an sql string in your sp,
the user will need rights to the table aswell.

Another method (which I prefer) is of course to use a typed dataset in your
business layer.

"Dabbler" wrote:
Dustin

What happens if I have a datetime field which is not on my form, but is in
my object class and is pushed into the stored procedure. If I set the stored
procedure to JoinDate = null will it simply ignore this column in the update
or will it replace the value with null?

Thanks again, I think the fog is lifting... ;)

"Dustin van de Sande" wrote:
Hi Dabbler,

I normally use the objectdatasource so I can use a typed dataset without
stored procedures.
The stored procedures I normally use on heavy calculation jobs or multiple
db updates, not single records.
However I don't believe it's a problem to have your nullable fields as a
nullable parameter in a stored procedure.

Good luck.

"Dabbler" wrote:
Hi Dustin

Thanks for that clarification. I'm wondering what the best practices is for
this, as I've been pouring over other developers ObjectDataSource examples
using business classes and stored procedures and nowhere do I see a hint of
coding to deal with null values.

Do people typically initialize db table columns to "" instead of leaving
them null?

Thanks again for this info, I have 50+ columns in this table and form so I
think the easiest thing to do is renegerate the stored procedure (using
Codesmith) with null as default value. I'm really loosing my interest in
ObjectDataSource, given the gray hair it's given me ;)

"Dustin van de Sande" wrote:

> Dabbler,
>
> When you add a parameter to your sqlcommand with the value null or even an
> empty string, the stored procedure will think the parameter is not supplied.
>
> There are two ways to solve your problem:
> 1: Alter your stored procedure to allow the Email parameter (and maybe
> others) to be null:
>
> CREATE PROCEDURE [dbo].UpdateRegistrant
> @RegistrantId int,
> @FirstName nvarchar(25),
> @MI nvarchar(3),
> @LastName nvarchar(25),
> @EMail nvarchar(25) = null,
> ...
> AS
>
> 2: When passing the parameter to the sqlcommand ensure that the value is not
> null or an empty string:
> if (reg.EMail == null || reg.EMail.Length ==0)
> reg.EMail = "dummy value";
> cmd.Parameters["@EMail"].Value = reg.EMail;
>
> Good luck.
>
> Regards, Dustin.
>
> "Dabbler" wrote:
>
> > I'm using an ObjectDataSource with a stored procedure and am getting the
> > following error when trying to update (ExecuteNonQuery):
> >
> > System.Data.SqlClient.SqlException: Procedure or Function 'UpdateRegistrant'
> > expects parameter '@EMail', which was not supplied.
> >
> > The field value was null in the database and not changed in the FormView so
> > is null going back into the stored procedure. I'm stumped and would greatly
> > appreciate any suggestions.
> >
> > TypeName code from RegistrantDB:
> > public void UpdateRegistrant(
> > RegistrantDetails reg
> > ) {
> > SqlConnection con = new SqlConnection( connectionString );
> > SqlCommand cmd = new SqlCommand( "UpdateRegistrant", con );
> > cmd.CommandType = CommandType.StoredProcedure;
> > ...
> > cmd.Parameters.Add( new SqlParameter( "@EMail", SqlDbType.NVarChar, 25 ) );
> > cmd.Parameters["@EMail"].Value = reg.EMail;
> > ...
> > con.Open();
> > cmd.ExecuteNonQuery();
> > con.Close();
> >
> > code from my DataObjectTypeName RegistrantDetails:
> > protected string eMail = String.Empty;
> > public string EMail
> > {
> > get {return eMail;}
> > set {eMail = value;}
> > }
> >
> > My stored procedure UpdateRegistrant:
> > CREATE PROCEDURE [dbo].UpdateRegistrant
> > @RegistrantId int,
> > @FirstName nvarchar(25),
> > @MI nvarchar(3),
> > @LastName nvarchar(25),
> > @EMail nvarchar(25),
> > ...
> > AS
> > UPDATE [dbo].[Registrants] SET
> > [FirstName] = @FirstName,
> > [MI] = @MI,
> > [LastName] = @LastName,
> > [email] = @EMail,
> > ...
> > WHERE
> > [RegistrantId] = @RegistrantId
> >

Apr 7 '06 #6
Wow, I wasn't aware of this drawback using stored procedures. I thought I
could use an object class (commuter) and a db class to retrieve/store the
form fields. Given the number of fields involved these options would get
pretty ugly.

In your preferred DataSet scenario how do you get the data from the dataset
columns in and out of the form fields? Do you set them one by one in the code
behind file or do you have some other way of binding the field values?

Thanks for your time in getting me past these hurdles.

"Dustin van de Sande" wrote:
Dabbler,

If you have the date in your update statement it will update the value with
null. You can create a script to bypass this, but I don't think you should.
If @Joindate is null
begin
update ....
end
else
begin
update
end

Another way could be to generate a sql statement in a varchar to update the
fields supplied:
declare @sqlstring varchar(2000)
set @sqlstring = 'Update tbl_table set '
if @JoinDate is null
begin
set @sqlstring = @sqlstring + 'joindate='+ @JoinDate --Probably you will
have to cast this
end
--Other params
exec @sqlstring

Beware of the permissions however. When you use an sql string in your sp,
the user will need rights to the table aswell.

Another method (which I prefer) is of course to use a typed dataset in your
business layer.

"Dabbler" wrote:
Dustin

What happens if I have a datetime field which is not on my form, but is in
my object class and is pushed into the stored procedure. If I set the stored
procedure to JoinDate = null will it simply ignore this column in the update
or will it replace the value with null?

Thanks again, I think the fog is lifting... ;)

"Dustin van de Sande" wrote:
Hi Dabbler,

I normally use the objectdatasource so I can use a typed dataset without
stored procedures.
The stored procedures I normally use on heavy calculation jobs or multiple
db updates, not single records.
However I don't believe it's a problem to have your nullable fields as a
nullable parameter in a stored procedure.

Good luck.

"Dabbler" wrote:

> Hi Dustin
>
> Thanks for that clarification. I'm wondering what the best practices is for
> this, as I've been pouring over other developers ObjectDataSource examples
> using business classes and stored procedures and nowhere do I see a hint of
> coding to deal with null values.
>
> Do people typically initialize db table columns to "" instead of leaving
> them null?
>
> Thanks again for this info, I have 50+ columns in this table and form so I
> think the easiest thing to do is renegerate the stored procedure (using
> Codesmith) with null as default value. I'm really loosing my interest in
> ObjectDataSource, given the gray hair it's given me ;)
>
> "Dustin van de Sande" wrote:
>
> > Dabbler,
> >
> > When you add a parameter to your sqlcommand with the value null or even an
> > empty string, the stored procedure will think the parameter is not supplied.
> >
> > There are two ways to solve your problem:
> > 1: Alter your stored procedure to allow the Email parameter (and maybe
> > others) to be null:
> >
> > CREATE PROCEDURE [dbo].UpdateRegistrant
> > @RegistrantId int,
> > @FirstName nvarchar(25),
> > @MI nvarchar(3),
> > @LastName nvarchar(25),
> > @EMail nvarchar(25) = null,
> > ...
> > AS
> >
> > 2: When passing the parameter to the sqlcommand ensure that the value is not
> > null or an empty string:
> > if (reg.EMail == null || reg.EMail.Length ==0)
> > reg.EMail = "dummy value";
> > cmd.Parameters["@EMail"].Value = reg.EMail;
> >
> > Good luck.
> >
> > Regards, Dustin.
> >
> > "Dabbler" wrote:
> >
> > > I'm using an ObjectDataSource with a stored procedure and am getting the
> > > following error when trying to update (ExecuteNonQuery):
> > >
> > > System.Data.SqlClient.SqlException: Procedure or Function 'UpdateRegistrant'
> > > expects parameter '@EMail', which was not supplied.
> > >
> > > The field value was null in the database and not changed in the FormView so
> > > is null going back into the stored procedure. I'm stumped and would greatly
> > > appreciate any suggestions.
> > >
> > > TypeName code from RegistrantDB:
> > > public void UpdateRegistrant(
> > > RegistrantDetails reg
> > > ) {
> > > SqlConnection con = new SqlConnection( connectionString );
> > > SqlCommand cmd = new SqlCommand( "UpdateRegistrant", con );
> > > cmd.CommandType = CommandType.StoredProcedure;
> > > ...
> > > cmd.Parameters.Add( new SqlParameter( "@EMail", SqlDbType.NVarChar, 25 ) );
> > > cmd.Parameters["@EMail"].Value = reg.EMail;
> > > ...
> > > con.Open();
> > > cmd.ExecuteNonQuery();
> > > con.Close();
> > >
> > > code from my DataObjectTypeName RegistrantDetails:
> > > protected string eMail = String.Empty;
> > > public string EMail
> > > {
> > > get {return eMail;}
> > > set {eMail = value;}
> > > }
> > >
> > > My stored procedure UpdateRegistrant:
> > > CREATE PROCEDURE [dbo].UpdateRegistrant
> > > @RegistrantId int,
> > > @FirstName nvarchar(25),
> > > @MI nvarchar(3),
> > > @LastName nvarchar(25),
> > > @EMail nvarchar(25),
> > > ...
> > > AS
> > > UPDATE [dbo].[Registrants] SET
> > > [FirstName] = @FirstName,
> > > [MI] = @MI,
> > > [LastName] = @LastName,
> > > [email] = @EMail,
> > > ...
> > > WHERE
> > > [RegistrantId] = @RegistrantId
> > >

Apr 7 '06 #7
When you have to update a lot of fields in a table, a stored procedure isn't
always the best solution indeed.

In my solutions I add a dataset to my businesslayer.
In my webapplication I create an objectdatasource to the dataset in the
businesslayer and bind a formview control to it. You can specify which
get/set/delete command the formview control should use.
All the fields are automatically bound to the formview.
You can create your own template for the edit and readonly mode (and if you
prefer even one for the insert mode. This one is automatically added, but
when deleted it uses the edit mode!)

Your welcome.

"Dabbler" wrote:
Wow, I wasn't aware of this drawback using stored procedures. I thought I
could use an object class (commuter) and a db class to retrieve/store the
form fields. Given the number of fields involved these options would get
pretty ugly.

In your preferred DataSet scenario how do you get the data from the dataset
columns in and out of the form fields? Do you set them one by one in the code
behind file or do you have some other way of binding the field values?

Thanks for your time in getting me past these hurdles.

"Dustin van de Sande" wrote:
Dabbler,

If you have the date in your update statement it will update the value with
null. You can create a script to bypass this, but I don't think you should.
If @Joindate is null
begin
update ....
end
else
begin
update
end

Another way could be to generate a sql statement in a varchar to update the
fields supplied:
declare @sqlstring varchar(2000)
set @sqlstring = 'Update tbl_table set '
if @JoinDate is null
begin
set @sqlstring = @sqlstring + 'joindate='+ @JoinDate --Probably you will
have to cast this
end
--Other params
exec @sqlstring

Beware of the permissions however. When you use an sql string in your sp,
the user will need rights to the table aswell.

Another method (which I prefer) is of course to use a typed dataset in your
business layer.

"Dabbler" wrote:
Dustin

What happens if I have a datetime field which is not on my form, but is in
my object class and is pushed into the stored procedure. If I set the stored
procedure to JoinDate = null will it simply ignore this column in the update
or will it replace the value with null?

Thanks again, I think the fog is lifting... ;)

"Dustin van de Sande" wrote:

> Hi Dabbler,
>
> I normally use the objectdatasource so I can use a typed dataset without
> stored procedures.
> The stored procedures I normally use on heavy calculation jobs or multiple
> db updates, not single records.
> However I don't believe it's a problem to have your nullable fields as a
> nullable parameter in a stored procedure.
>
> Good luck.
>
> "Dabbler" wrote:
>
> > Hi Dustin
> >
> > Thanks for that clarification. I'm wondering what the best practices is for
> > this, as I've been pouring over other developers ObjectDataSource examples
> > using business classes and stored procedures and nowhere do I see a hint of
> > coding to deal with null values.
> >
> > Do people typically initialize db table columns to "" instead of leaving
> > them null?
> >
> > Thanks again for this info, I have 50+ columns in this table and form so I
> > think the easiest thing to do is renegerate the stored procedure (using
> > Codesmith) with null as default value. I'm really loosing my interest in
> > ObjectDataSource, given the gray hair it's given me ;)
> >
> > "Dustin van de Sande" wrote:
> >
> > > Dabbler,
> > >
> > > When you add a parameter to your sqlcommand with the value null or even an
> > > empty string, the stored procedure will think the parameter is not supplied.
> > >
> > > There are two ways to solve your problem:
> > > 1: Alter your stored procedure to allow the Email parameter (and maybe
> > > others) to be null:
> > >
> > > CREATE PROCEDURE [dbo].UpdateRegistrant
> > > @RegistrantId int,
> > > @FirstName nvarchar(25),
> > > @MI nvarchar(3),
> > > @LastName nvarchar(25),
> > > @EMail nvarchar(25) = null,
> > > ...
> > > AS
> > >
> > > 2: When passing the parameter to the sqlcommand ensure that the value is not
> > > null or an empty string:
> > > if (reg.EMail == null || reg.EMail.Length ==0)
> > > reg.EMail = "dummy value";
> > > cmd.Parameters["@EMail"].Value = reg.EMail;
> > >
> > > Good luck.
> > >
> > > Regards, Dustin.
> > >
> > > "Dabbler" wrote:
> > >
> > > > I'm using an ObjectDataSource with a stored procedure and am getting the
> > > > following error when trying to update (ExecuteNonQuery):
> > > >
> > > > System.Data.SqlClient.SqlException: Procedure or Function 'UpdateRegistrant'
> > > > expects parameter '@EMail', which was not supplied.
> > > >
> > > > The field value was null in the database and not changed in the FormView so
> > > > is null going back into the stored procedure. I'm stumped and would greatly
> > > > appreciate any suggestions.
> > > >
> > > > TypeName code from RegistrantDB:
> > > > public void UpdateRegistrant(
> > > > RegistrantDetails reg
> > > > ) {
> > > > SqlConnection con = new SqlConnection( connectionString );
> > > > SqlCommand cmd = new SqlCommand( "UpdateRegistrant", con );
> > > > cmd.CommandType = CommandType.StoredProcedure;
> > > > ...
> > > > cmd.Parameters.Add( new SqlParameter( "@EMail", SqlDbType.NVarChar, 25 ) );
> > > > cmd.Parameters["@EMail"].Value = reg.EMail;
> > > > ...
> > > > con.Open();
> > > > cmd.ExecuteNonQuery();
> > > > con.Close();
> > > >
> > > > code from my DataObjectTypeName RegistrantDetails:
> > > > protected string eMail = String.Empty;
> > > > public string EMail
> > > > {
> > > > get {return eMail;}
> > > > set {eMail = value;}
> > > > }
> > > >
> > > > My stored procedure UpdateRegistrant:
> > > > CREATE PROCEDURE [dbo].UpdateRegistrant
> > > > @RegistrantId int,
> > > > @FirstName nvarchar(25),
> > > > @MI nvarchar(3),
> > > > @LastName nvarchar(25),
> > > > @EMail nvarchar(25),
> > > > ...
> > > > AS
> > > > UPDATE [dbo].[Registrants] SET
> > > > [FirstName] = @FirstName,
> > > > [MI] = @MI,
> > > > [LastName] = @LastName,
> > > > [email] = @EMail,
> > > > ...
> > > > WHERE
> > > > [RegistrantId] = @RegistrantId
> > > >

Apr 10 '06 #8

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
by: FizzBin | last post by:
We are writing a C application that is using ODBC to insert records into a database. We have a NOT NULL column that can legitimately have an empty value, i.e. we know the value and it is empty...
4
by: Marcel Brekelmans | last post by:
Hello, I seem to get an extra empty field in every 'mysql_fetch_array' command I issue. For example: I have a simple table 'tblName': ID Name 1 Jane 2 Joe 2 Doe
1
by: Srinadh | last post by:
Hi all, We have files with about 20 to 30 fields per row. We are trying to update such files with about 60 rows as contiguous data in a CLOB field. It passes through. But when we try...
1
by: Oleg Ogurok | last post by:
Hi all, I want to use RegularExpressionValidator to enforce non-empty integer format in a TextBox. However, the validator doesn't give the error when the textbox is empty. For example, if...
3
by: Joachim | last post by:
Hi I am a beginner in VB.NET, and have a problem with empty field in Access I have transfered a worksheet in Excel to Access table. Some of the cels are empty I use VB.NET program to acces...
4
by: Cylix | last post by:
As the title, I have a simple stored procedure just input a index and return a row, how can I get the return record by in my VB.Net application using ADODB Object 2.5?
0
by: Paul | last post by:
Hi I have a simple stored procedure shown below and am trying to use it in a ..net window application to fill a dataset. IT works out of query analyzer, returns data from an excel file. Anyhow in...
0
by: Chris Zopers | last post by:
Hello, I have some textboxes in a FormView control. The FormView is bound to an ObjectDataSource. The ObjectDataSource has a SelectMethod that gets an object and the textboxes in the FormView...
1
by: Shan Yang | last post by:
Hi, I am handling tab delimited txt files that have multiple fields. But some of the fields can be empty. So it will appear as <TAB><TAB> in the file rather than <TAB>something<TAB>. If I read in...
0
by: veera ravala | last post by:
ServiceNow is a powerful cloud-based platform that offers a wide range of services to help organizations manage their workflows, operations, and IT services more efficiently. At its core, ServiceNow...
0
by: VivesProcSPL | last post by:
Obviously, one of the original purposes of SQL is to make data query processing easy. The language uses many English-like terms and syntax in an effort to make it easy to learn, particularly for...
3
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 3 Jan 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). For other local times, please check World Time Buddy In...
0
by: mar23 | last post by:
Here's the situation. I have a form called frmDiceInventory with subform called subfrmDice. The subform's control source is linked to a query called qryDiceInventory. I've been trying to pick up the...
2
by: jimatqsi | last post by:
The boss wants the word "CONFIDENTIAL" overlaying certain reports. He wants it large, slanted across the page, on every page, very light gray, outlined letters, not block letters. I thought Word Art...
0
by: fareedcanada | last post by:
Hello I am trying to split number on their count. suppose i have 121314151617 (12cnt) then number should be split like 12,13,14,15,16,17 and if 11314151617 (11cnt) then should be split like...
0
Git
by: egorbl4 | last post by:
Скачал я git, хотел начать настройку, а там вылезло вот это Что это? Что мне с этим делать? ...
1
by: davi5007 | last post by:
Hi, Basically, I am trying to automate a field named TraceabilityNo into a web page from an access form. I've got the serial held in the variable strSearchString. How can I get this into the...
0
by: MeoLessi9 | last post by:
I have VirtualBox installed on Windows 11 and now I would like to install Kali on a virtual machine. However, on the official website, I see two options: "Installer images" and "Virtual machines"....

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.