2016-05-24 7 views
1

SQL Server 2008でデータ型varbinary(MAX)の列を持つテーブルを作成しました。C#コードを使用してPDFファイル(18000バイト)を挿入しようとしましたがエラー "文字列またはバイナリデータが切り捨てられます"文字列またはバイナリデータがVarbinary(MAX)で切り捨てられる

私は多くのスレッドを通過した、答えは、列サイズがデータサイズより小さいためです。しかしVarbinary(MAX)の最大サイズは2GBです。私は助けが必要です

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]<>''), 

);

はここでここでの問題はProject_Type分野である私の挿入コード

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文字列

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)" 
+3

テーブル定義とSQL文を表示できますか? –

+0

@PatrickHofmanテーブル定義を追加しました。 –

+0

ファイル名がなぜそれ以上で、名前の場合は 'VARCHAR(MAX) 'であってはいけませんか? – Lloyd

答えて

3

です。データ型の長さと実際の値にここでの比較:

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 
) 

あなたはProject_Typeのみ10個の文字を許可しますが、実際の値(ONSITE-DOMESTIC)は15文字の長さであることがわかります。

+0

@パトリック....ありがとうございました....私は列のサイズを増やした..しかし、私は新しい問題に直面している "データを変換するエラーvarcharを数値に入力します。あなたは他の列に間違っていると感じますか? –

+0

明確な問題ではありません。自分でフィールドを削除してみてください。 NULL値を許可し、各列を1つずつ試す表を作成します。 –

+0

10進数を指定しないときにINTを超えてNUMERICを使用する理由はありますか? –

関連する問題