If you do not allow nulls in a column, then SQL has to do one of two things when you insert a new record, but don't supply a value:
1) Complain and reject the insert with an exception.
2) Use a default value for the column, if set.
Numeric values have a default of zero (unless you change that in your table definition), but others cannot be assigned a default value because there is no sensible default that can be applied.
In your windows application, if you do not have a value, then I would suggest that you supply one which makes sense to your windows application as a "no value assigned": for a string column, that would be an empty string, for numbers I generally use -1 or the maximum value, or I allow nulls and check for them!
Check your table definition, and see what default you have allowed.
BTW: You can post table definitions here very easily: just go to SSMS, right click the table, and select "Script Table as...", "CREATE To...", "Clipboard". You can then paste that directly into your question:
USE [Testing]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[MyTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NULL,
[Model] [varchar](50) NULL,
CONSTRAINT [PK_MyTable_1] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO