sqlbulkcopy error

Hi,
would you please help me out with this problem, i already stuck for couple days, any help will be greatly appreciate...

i'm working on a webpage with a temp datatable (one row and 30 columns), i try use sqlbulkcopy to insert to my sql table but with the following error:
System.InvalidOperationException: The given value of type String from the data source cannot be converted to type nvarchar of the specified target column. ---> System.InvalidOperationException: String or binary data would be truncated. at System.Data.SqlClient.SqlBulkCopy.ConvertValue(Object value, _SqlMetaData metadata, Boolean isNull, Boolean& isSqlType, Boolean& coercedToDataFeed) --- End of inner exception stack trace --- at System.Data.SqlClient.SqlBulkCopy.ConvertValue(Object value, _SqlMetaData metadata, Boolean isNull, Boolean& isSqlType, Boolean& coercedToDataFeed) at System.Data.SqlClient.SqlBulkCopy.ReadWriteColumnValueAsync(Int32 col) at System.Data.SqlClient.SqlBulkCopy.CopyColumnsAsync(Int32 col, TaskCompletionSource`1 source) at System.Data.SqlClient.SqlBulkCopy.CopyRowsAsync(Int32 rowsSoFar, Int32 totalRows, CancellationToken cts, TaskCompletionSource`1 source) at System.Data.SqlClient.SqlBulkCopy.CopyBatchesAsyncContinued(BulkCopySimpleResultSet internalResults, String updateBulkCommandText, CancellationToken cts, TaskCompletionSource`1 source) at System.Data.SqlClient.SqlBulkCopy.CopyBatchesAsync(BulkCopySimpleResultSet internalResults, String updateBulkCommandText, CancellationToken cts, TaskCompletionSource`1 source) at System.Data.SqlClient.SqlBulkCopy.WriteToServerInternalRestContinuedAsync(BulkCopySimpleResultSet internalResults, CancellationToken cts, TaskCompletionSource`1 source) at System.Data.SqlClient.SqlBulkCopy.WriteToServerInternalRestAsync(CancellationToken cts, TaskCompletionSource`1 source) at System.Data.SqlClient.SqlBulkCopy.WriteToServerInternalAsync(CancellationToken ctoken) at System.Data.SqlClient.SqlBulkCopy.WriteRowSourceToServerAsync(Int32 columnCount, CancellationToken ctoken) at System.Data.SqlClient.SqlBulkCopy.WriteToServer(DataTable table, DataRowState rowState) at System.Data.SqlClient.SqlBulkCopy.WriteToServer(DataTable table) at Embroidery_embroideryOrder.setTrailNum(DataTable dt) in C:\temp\embroideryOrder.aspx.vb:line 1438

here's my code:
                  'create datatable
                  Dim dt As DataTable = New DataTable
                  dt.Columns.Add(New DataColumn("c1", GetType(String)))
                  dt.Columns.Add(New DataColumn("c2", GetType(String)))
                  dt.Columns.Add(New DataColumn("c3", GetType(String)))
                  dt.Columns.Add(New DataColumn("c4", GetType(Integer)))
                  dt.Columns.Add(New DataColumn("c5", GetType(Integer)))
                  ...
                  dt.Columns.Add(New DataColumn("c28", GetType(String)))
                  dt.Columns.Add(New DataColumn("c30", GetType(Decimal)))
                  
                  'assign values
                  dim row = dt.NewRow()
                  row("c1") = "simon"
                  row("c2") = "crew"
                  row("c3") = "1234"
                  row("c4") = 2
                  row("c5") = 5
                  ...
                  row("28") = "VC"
                  row("c30") = 3.40
                  dt.Rows.Add(row)
                  
                  'display without issue
                  GridView2.DataSource = dt
                  GridView2.DataBind()
                  GridView2.Visible = True
                  
                  'insert to sql
                  Dim con2 As String = ConfigurationManager.ConnectionStrings("TestCon").ConnectionString
                  Dim copy As SqlBulkCopy
                  copy = New SqlBulkCopy(con2, SqlBulkCopyOptions.KeepIdentity)
                  Using copy
                        copy.BatchSize = 25
                        copy.DestinationTableName = "dbo.embTest"
                        copy.ColumnMappings.Add("c1", "c1")
                        copy.ColumnMappings.Add("c2", "c2")
                        copy.ColumnMappings.Add("c3", "c3")
                        copy.ColumnMappings.Add("c4", "c4")
                        copy.ColumnMappings.Add("c5", "c5")
                        ...
                        copy.ColumnMappings.Add("c28", "c28")
                        copy.ColumnMappings.Add("c30", "c30")
                        Try
                              copy.WriteToServer(dt)
                        Catch ex As Exception
                              Label6.Text = ex.ToString
                              Label6.Visible = True
                        Finally
                              copy.Close()
                        End Try
                  End Using
                  
here's my sql table definition:
CREATE TABLE [dbo].[embTest](
      [id] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
      [c1] [nvarchar](17) NULL,
      [c2] [nvarchar](20) NULL,
      [c3] [nvarchar](100) NULL,
      [c4] [int] NULL,
      [c5] [int] NULL,
      ...
      [c29] [smalldatetime] NULL,
      [c30] [decimal] (10,4) NULL
 CONSTRAINT [PK_embTest] 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

thank you.
IUSRAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
Raheman M. AbdulConnect With a Mentor Senior Infrastructure Support Analyst & Systems DeveloperCommented:
Make sure the data values in the columns does not contain any quotes inside the string,
make sure the length of the input data is not more than the length of the column it is designed for.
0
 
IUSRAuthor Commented:
Hi Raheman,

i triple checked the string and column length in my table: the string is 1000 and sql table datatype is nvarchar(100)...
i have no clue what went wrong... =(
0
 
IUSRAuthor Commented:
sorry, when I go through the original data in my datatable, c2 has length 60 but when I create my new datatable, I set it to 20...
now everything is working. thank you.
0
 
chaauCommented:
Why is this line does not contain "c"?
row("28") = "VC"

Open in new window

Shouldn't it be:
row("c28") = "VC"

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.