![](/img/trans.png)
[英]How to fix “String or binary data would be truncated” when convert .docx file to binary and insert into varbinary(Max)?
[英]String or binary data would be truncated in Varbinary(MAX)
我在SQL Server 2008中用數據類型為varbinary(MAX)的列之一創建了一個表。使用C#代碼,我嘗試插入一個pdf文件(18000字節),但給出錯誤“ 字符串或二進制數據將被截斷 ”
我經歷了很多線程,答案是因為列大小小於數據大小。 但是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]<>''),
);
這是我的插入代碼
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;
}
我的命令字符串
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)"
這里的問題是Project_Type
字段。 這里是數據類型長度和實際值的比較:
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個字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.