2012-11-20 3 views
1

FormView는 ItemTemplate, EditItemTemplate 및 InsertItemTemplate의 세 가지 상태로 있습니다.FormView에서 파일 업로드 (매개 변수로)

<asp:LinkButton runat="server" OnCommand="GetBenefitPdf" CommandArgument='<%# Eval("benefit_id") %>' Text="Get PDF" /> 

과 : ItemTemaplate에서 , 나는 외부 방식으로 데이터베이스에서 파일을 다운로드하는 것이 가능하게 한

protected void GetBenefitPdf(object sender, CommandEventArgs e) 
{ 
    int benefit_id = int.Parse(e.CommandArgument.ToString()); 
    Response.Redirect("GetPdf.aspx?id=" + benefit_id + "&page=ManageBenefits.aspx"); 
} 

그러나 나는 또한 InsertItemTemplate과 EditItemTemplate에서 파일 (첨부 파일)을 업로드해야 . 나는이 만든 위의 모두에서 :

<asp:FileUpload ID="filedata" runat="server" /> 

그러나 SQL 명령은 (매개 변수가 주어진다) 예외하고 있습니다 :

문자열이나 이진 데이터는 잘립니다 것입니다. 그 진술서는 만료되었습니다.

어떻게 처리해야합니까?

편집이 : SQL이 주어진다 :

<asp:SqlDataSource ID="SqlDataSourceManageBenefits" runat="server" ConnectionString="<%$ ConnectionStrings:validConnectionString %>" 
SelectCommand="SELECT [min_buyers], [active], [benefit_id], [name], [description], [price], [avail_pcs], [type], [months], [link], [family], [start_date], [end_date], [months_cancel], [price_month], [price_full], [payroll], [payroll_add], [payroll_sub], [price_all], [labor_id], [filedata] FROM [benefits]" 
FilterExpression=" type='{0}' " ConflictDetection="CompareAllValues" DeleteCommand="DELETE FROM [benefits] WHERE [benefit_id] = @original_benefit_id AND (([min_buyers] = @original_min_buyers) OR ([min_buyers] IS NULL AND @original_min_buyers IS NULL)) AND [active] = @original_active AND (([name] = @original_name) OR ([name] IS NULL AND @original_name IS NULL)) AND (([description] = @original_description) OR ([description] IS NULL AND @original_description IS NULL)) AND (([price] = @original_price) OR ([price] IS NULL AND @original_price IS NULL)) AND (([avail_pcs] = @original_avail_pcs) OR ([avail_pcs] IS NULL AND @original_avail_pcs IS NULL)) AND (([type] = @original_type) OR ([type] IS NULL AND @original_type IS NULL)) AND (([months] = @original_months) OR ([months] IS NULL AND @original_months IS NULL)) AND (([link] = @original_link) OR ([link] IS NULL AND @original_link IS NULL)) AND (([family] = @original_family) OR ([family] IS NULL AND @original_family IS NULL)) AND (([start_date] = @original_start_date) OR ([start_date] IS NULL AND @original_start_date IS NULL)) AND (([end_date] = @original_end_date) OR ([end_date] IS NULL AND @original_end_date IS NULL)) AND (([months_cancel] = @original_months_cancel) OR ([months_cancel] IS NULL AND @original_months_cancel IS NULL)) AND (([price_month] = @original_price_month) OR ([price_month] IS NULL AND @original_price_month IS NULL)) AND (([price_full] = @original_price_full) OR ([price_full] IS NULL AND @original_price_full IS NULL)) AND (([payroll] = @original_payroll) OR ([payroll] IS NULL AND @original_payroll IS NULL)) AND (([payroll_add] = @original_payroll_add) OR ([payroll_add] IS NULL AND @original_payroll_add IS NULL)) AND (([payroll_sub] = @original_payroll_sub) OR ([payroll_sub] IS NULL AND @original_payroll_sub IS NULL)) AND (([price_all] = @original_price_all) OR ([price_all] IS NULL AND @original_price_all IS NULL)) AND (([labor_id] = @original_labor_id) OR ([labor_id] IS NULL AND @original_labor_id IS NULL)) AND (([filedata] = @original_filedata) OR ([filedata] IS NULL AND @original_filedata IS NULL))" InsertCommand="INSERT INTO [benefits] ([min_buyers], [active], [name], [description], [price], [avail_pcs], [type], [months], [link], [family], [start_date], [end_date], [months_cancel], [price_month], [price_full], [payroll], [payroll_add], [payroll_sub], [price_all]), [labor_id], [filedata] VALUES (@min_buyers, @active, @name, @description, @price, @avail_pcs, @type, @months, @link, @family, @start_date, @end_date, @months_cancel, @price_month, @price_full, @payroll, @payroll_add, @payroll_sub, @price_all, @labor_id, @filedata)" OldValuesParameterFormatString="original_{0}" UpdateCommand="UPDATE [benefits] SET [min_buyers] = @min_buyers, [active] = @active, [name] = @name, [description] = @description, [price] = @price, [avail_pcs] = @avail_pcs, [type] = @type, [months] = @months, [link] = @link, [family] = @family, [start_date] = @start_date, [end_date] = @end_date, [months_cancel] = @months_cancel, [price_month] = @price_month, [price_full] = @price_full, [payroll] = @payroll, [payroll_add] = @payroll_add, [payroll_sub] = @payroll_sub, [price_all] = @price_all, [labor_id] = @labor_id, [filedata] = @filedata WHERE [benefit_id] = @original_benefit_id AND (([min_buyers] = @original_min_buyers) OR ([min_buyers] IS NULL AND @original_min_buyers IS NULL)) AND [active] = @original_active AND (([name] = @original_name) OR ([name] IS NULL AND @original_name IS NULL)) AND (([description] = @original_description) OR ([description] IS NULL AND @original_description IS NULL)) AND (([price] = @original_price) OR ([price] IS NULL AND @original_price IS NULL)) AND (([avail_pcs] = @original_avail_pcs) OR ([avail_pcs] IS NULL AND @original_avail_pcs IS NULL)) AND (([type] = @original_type) OR ([type] IS NULL AND @original_type IS NULL)) AND (([months] = @original_months) OR ([months] IS NULL AND @original_months IS NULL)) AND (([link] = @original_link) OR ([link] IS NULL AND @original_link IS NULL)) AND (([family] = @original_family) OR ([family] IS NULL AND @original_family IS NULL)) AND (([start_date] = @original_start_date) OR ([start_date] IS NULL AND @original_start_date IS NULL)) AND (([end_date] = @original_end_date) OR ([end_date] IS NULL AND @original_end_date IS NULL)) AND (([months_cancel] = @original_months_cancel) OR ([months_cancel] IS NULL AND @original_months_cancel IS NULL)) AND (([price_month] = @original_price_month) OR ([price_month] IS NULL AND @original_price_month IS NULL)) AND (([price_full] = @original_price_full) OR ([price_full] IS NULL AND @original_price_full IS NULL)) AND (([payroll] = @original_payroll) OR ([payroll] IS NULL AND @original_payroll IS NULL)) AND (([payroll_add] = @original_payroll_add) OR ([payroll_add] IS NULL AND @original_payroll_add IS NULL)) AND (([payroll_sub] = @original_payroll_sub) OR ([payroll_sub] IS NULL AND @original_payroll_sub IS NULL)) AND (([price_all] = @original_price_all) OR ([price_all] IS NULL AND @original_price_all IS NULL)) AND (([labor_id] = @original_labor_id) OR ([labor_id] IS NULL AND @original_labor_id IS NULL)) AND (([filedata] = @original_filedata) OR ([filedata] IS NULL AND @original_filedata IS NULL))"> 

또한 매개 변수가 :

<asp:Parameter Name="original_filedata" Type="Byte" /> 
<asp:Parameter Name="filedata" Type="Byte" /> 
+0

그래서 당신은 SQL의 문제가 있지만, SQL없이 C# 코드를 게시 : OnInserting 및 OnUpdating 명령을 또한

<asp:Parameter Name="original_filedata" DbType="Binary" /> <asp:Parameter Name="filedata" DbType="Binary" /> 

과 : 이 솔루션은 사용하는 것입니다? 나는 당신이 더 길게 삽입하는 데이터베이스의 컬럼을 만들 필요가 있다고 추측하고있다. (길이를 늘린다.) 그러나 당신이 위에 무엇을 가지고 있는지 말할 방법이 없다. – Trisped

+0

죄송합니다, 당신 말이 맞아요. 나는 그 질문을 편집했다. 열은 데이터베이스에서 varbinary (MAX)입니다. – pbies

답변

1

좋아, 나는 그것을 해결했다.

protected void Attach(object sender, SqlDataSourceCommandEventArgs e) 
{ 
    var file = ((FileUpload)FormViewManageBenefits.FindControl("filedata")).FileBytes; 
    e.Command.Parameters["@filedata"].Value = file; 
} 
관련 문제