3

I created a table with one of the column having datatype varbinary(MAX) in sql server 2008. Using C# code I tried to insert a pdf file(18000 bytes) but it giving error "String or binary data would be truncated"

I gone through many thread, answer is because of column size is lesser than data size. But the maximum size of Varbinary(MAX) is 2GB. I need a help

CREATE TABLE [dbo].[Purchase_Order] (
[PO_Number]           VARCHAR (25)    NOT NULL,
[Organization_Name]   VARCHAR (10)    NOT NULL,
[PO_Date]             DATE            NOT NULL,
[Value_Amount]        NUMERIC(8, 2)  NOT NULL,
[Currency_Type]       NVARCHAR (10)   NOT NULL,
[Customer_Name]       VARCHAR (50)    NOT NULL,
[Contact_Person]      VARCHAR (50)    NOT NULL,
[Customer_Location]   VARCHAR (20)    NOT NULL,
[End_Date]            DATE            NOT NULL,
[Emug_Contact_Person] VARCHAR (50)    NOT NULL,
[Payment_Terms]       NUMERIC (3)     NOT NULL,
[Project_Type]        NCHAR (10)      NOT NULL,
[File_Name]                VARBINARY (MAX) NOT NULL,
CHECK ([PO_Number]<>''),
CHECK ([Organization_Name]<>''),
CHECK ([PO_Date]<>''),
CHECK ([Value_Amount]<>(0)),
CHECK ([Currency_Type]<>''),
CHECK ([Customer_Name]<>''),
CHECK ([Contact_Person]<>''),
CHECK ([Customer_Location]<>''),
CHECK ([End_Date]<>''),
CHECK ([Emug_Contact_Person]<>''),
CHECK ([Payment_Terms]<>''),
CHECK ([Project_Type]<>''),

);

Here is my insert code

public int Insertcommand(string tablename, string[] columlist, object[] valuelist)
    {
        int x = 0;
        string commandstring = createcommand(tablename, columlist);
        MyCommand = new SqlCommand(commandstring, GetConnection());

        for (int i = 0; i < valuelist.Count(); i++)
        {
            MyCommand.Parameters.AddWithValue("@" + columlist[i].ToLower(), valuelist[i]);
        }

        x = MyCommand.ExecuteNonQuery();

        return x;
    }

variable names variable values

Mycommand string

qry = "INSERT into Purchase_Order (PO_Number, Organization_Name, PO_Date, Value_Amount, Currency_Type, Customer_Name, Contact_Person, Customer_Location, End_Date, Emug_Contact_Person, Payment_Terms, Project_Type, File_Name) VALUES (@po_number, @organization_name, @po_date, @value_amount, @currency_type, @customer_name, @contact_person, @customer_location, @end_date, @emug_contact_person, @payment_terms, @project_type, @file_name)"
11
  • 3
    Can you show the table definition and your SQL statement? Commented May 24, 2016 at 11:51
  • @PatrickHofman I added the table definition Commented May 24, 2016 at 11:56
  • Why would a file name be more, and shouldn't it be VARCHAR(MAX) if it's just a name? Commented May 24, 2016 at 11:58
  • 3
    Are you sure it's the File_Name column that has the truncation problem? Pleas show us your code that produces the error. Commented May 24, 2016 at 11:59
  • 1
    Is Onsite-Domestic is Project type?? if yes then this error occurred because of its length NCHAR(10) Commented May 24, 2016 at 12:37

2 Answers 2

6

The problem here is the Project_Type field. Here a comparison on the data type length and the actual values:

INSERT into dbo.Purchase_Order
( PO_Number -- 25
, Organization_Name -- 10
, PO_Date
, Value_Amount
, Currency_Type -- 10
, Customer_Name -- 50
, Contact_Person  -- 50
, Customer_Location  -- 20
, End_Date
, Emug_Contact_Person -- 50
, Payment_Terms
, Project_Type -- 10 <--- BAD STUFF
, File_Name -- MAX
)
VALUES
( @po_number -- 10
, @organization_name -- 3
, @po_date
, @value_amount
, @currency_type -- 5
, @customer_name -- 2
, @contact_person -- 3
, @customer_location -- 2
, @end_date
, @emug_contact_person -- 3
, @payment_terms
, @project_type -- 15 <--- BAD STUFF
, @file_name
)

You will see that Project_Type only allows 10 characters, but the actual value (ONSITE-DOMESTIC) is 15 characters long.

Sign up to request clarification or add additional context in comments.

4 Comments

@patrick....Thank you very much....I increased the size of column.. But i am facing new problem " Error converting data type varchar to numeric". Do u feel anything wrong with other column...
Not a clear problem. Try to eliminate fields yourself. Create a table that allows null values and try each column one by one.
Is there a reason to use NUMERIC over INT when not specifying a decimal?
@PatrickHofman that error because of check contraint...i gave string value for numeric field..
0

Just want to throw this out there in case someone else has the same issue. I had a trigger logging an audit trail and that trigger was causing the issue. It had nothing to do the the stored procedure.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.