2013-02-21 7 views
1

SQL 데이터베이스에서 저장 프로 시저를 실행하는 데 사용할 일련의 입력 소스가 있습니다. 저장 프로 시저는 다음과 같습니다어떻게 이것을 실행할 수 있습니까?

USE [InvoiceSHC] 
GO 
/****** Object: StoredProcedure [dbo].[UpdateSHCInvoice] Script Date: 02/21/2013 12:03:58 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- ============================================= 
-- Author:  <Author,,Name> 
-- Create date: <Create Date,,> 
-- Description: <Description,,> 
-- ============================================= 
ALTER PROCEDURE [dbo].[UpdateSHCInvoice] 
    -- Add the parameters for the stored procedure here 
    @Ref nvarchar(50), 
    @PhaseName nvarchar(50), 
    @PageType nvarchar(50), 
    @Page float, 
    @Percent nvarchar(50), 
    @ChngType nvarchar(50), 
    @RowCount int output 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    insert into MasterData2 ([Ad],[Phase],[Page Type] , [Page Rate], [Percent] , [Change Type]) 
        values(@Ref, @PhaseName , @PageType , @Page , @Percent ,@ChngType); 

    /* @@ROWCOUNT returns the number of rows that are affected by the last statement. */ 
    select @RowCount = @@ROWCOUNT 
END 

나는 테이블을 업데이트하라는 메시지를 내 양식에 버튼이 있습니다. 이것은 코드입니다 :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Data.SqlClient; 



namespace WebApplication1 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
     { 

     } 

     protected void MasterData_Selecting(object sender, SqlDataSourceSelectingEventArgs e) 
     { 

     } 

     protected void btnUpdate_Click(object sender, EventArgs e) 
     { 

      SqlConnection con = new SqlConnection("server=(local);database=InvoiceSHC;Trusted_Connection=Yes"); 



      SqlDataAdapter DA = new SqlDataAdapter("UpdateSHCInvoice", con); 

      SqlCommand cmd = new SqlCommand("UpdateSHCInvoice", con); 
      cmd.CommandType = CommandType.StoredProcedure; 

      SqlParameter Ref = cmd.Parameters.Add("@Ref", SqlDbType.NVarChar, 50); 
      SqlParameter Phase = cmd.Parameters.Add("@Phase", SqlDbType.NVarChar, 50); 
      SqlParameter PageType = cmd.Parameters.Add("@PageType", SqlDbType.NVarChar, 50); 
      SqlParameter Page = cmd.Parameters.Add("@Page", SqlDbType.NVarChar, 50); 
      SqlParameter Percent = cmd.Parameters.Add("@Percent", SqlDbType.Float); 
      SqlParameter ChngType = cmd.Parameters.Add("@ChngType", SqlDbType.NVarChar, 50); 

      Ref.Value = dlRef.SelectedItem; 
      Phase.Value = dlPhase.SelectedItem; 
      PageType.Value = dlPageType.SelectedItem; 
      Page.Value = tbPage.Text; 
      Percent.Value = dlPercent.SelectedItem; 
      ChngType.Value = dlChngType.SelectedItem; 


      con.Open(); 
      cmd.ExecuteNonQuery(); 




     } 


    } 
} 

내가 오류도없는 결과를 얻을 수 없다()을 cmd.ExecuteNonQuery을 꺼내합니다. 거기에 그 결과가 오류가 System.InvalidCastException : 개체 IConvertible 구현해야합니다.

나는 나의 무지 때문에 미리 사과한다. 나는 스스로 가르치고 새로운 것을 매일 배우고있다. 대략 127 년 4 일 동안 나는 이것을 이해할 수있을 것입니다.

답변

1

, 당신은 열려있는 연결을 떠나는 대해 걱정할 필요가 없습니다. 또한 Parameters.AddWithValue()을 사용하여 많은 행을 삭제할 수 있습니다.

using(SqlConnection con = new SqlConnection("yourConnectionString")) 
{ 
    //Not sure why you need a SqlDataAdapter unused here. 
    //SqlDataAdapter DA = new SqlDataAdapter("UpdateSHCInvoice", con); 
    SqlCommand cmd = new SqlCommand("UpdateSHCInvoice", con); 
    cmd.CommandType = CommandType.StoredProcedure; 

    cmd.Parameters.AddWithValue("@Ref", dlRef.SelectedItem.Value); 
    cmd.Parameters.AddWithValue("@Phase", dlPhase.SelectedItem.Value); 
    cmd.Parameters.AddWithValue("@PageType", dlPageType.SelectedItem.Value); 
    cmd.Parameters.AddWithValue("@Page", tbPage.Text); 
    cmd.Parameters.AddWithValue("@Percent", dlPercent.SelectedItem.Value); 
    cmd.Parameters.AddWithValue("@ChngType", dlChngType.SelectedItem.Value); 
    con.Open(); 
    cmd.ExecuteNonQuery(); 
} 
1

db에 해당 객체가 아닌 값을 추가하려고합니다. 저장 프로 시저에서이

 Ref.Value = dlRef.SelectedItem.Value; 
     Phase.Value = dlPhase.SelectedItem.Value; 
     PageType.Value = dlPageType.SelectedItem.Value; 
     Page.Value = tbPage.Text; 
     Percent.Value = dlPercent.SelectedItem.Value; 
     ChngType.Value = dlChngType.SelectedItem.Value; 
+0

nunespascal - 정말 고마워요,이 작품은 유명합니다. 나는 그것을 완성하기 위해 마지막으로 한 가지가 필요하다. 삽입을 마쳤 으면 화면의 정보를 기반으로 새로 고쳐 져야하는 gridview (gridview1)가 있습니다. 동일한 코드에 통합 될 수 있습니까? –

+0

gridview가 이미 데이터 소스에 바인딩되어 있다면'DataBind' 만 호출하면됩니다. – nunespascal

0

같은

올바른 코드는 @Page는 플로트 타입이지만, 당신의 클릭 방법에 당신은 값으로 tbPage.text을 할당한다. 올바른 유형으로 캐스팅해야합니다. (아래로)를 using 블록에 명령을 실행할 경우, 대신 SelectedItem의 자체를 SelectedItem.Value를 전달하는 것보다 다른

관련 문제