2013-02-21 60 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

除了傳遞SelectedItem.Value而不是SelectedItem本身,如果你在一個using塊執行你的命令(如下),您不必擔心離開連接打開。您也可以使用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

您正在尋找添加值,而不是相應的對象到數據庫。

糾正你這樣的代碼

 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)需要根據屏幕上的信息刷新。可以將它們合併到相同的代碼中嗎? – 2013-02-21 19:06:04

+0

如果你的gridview已經綁定到數據源,你只需要調用'DataBind' – nunespascal 2013-02-22 04:05:23

0

在您的存儲過程,@Page是float類型,但在點擊方法,則需要到的值賦給tbPage.text。你必須轉換成正確的類型。

相關問題