Asp.net 我如何才能让它执行?

Asp.net 我如何才能让它执行?,asp.net,Asp.net,我有一系列的输入源,我想用它们在我的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 -- ================================

我有一系列的输入源,我想用它们在我的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
当我取出cmd.ExecuteNonQuery()时,我没有得到任何错误,也没有得到任何结果。当我把它放在那里时,结果是一个错误System.InvalidCastException:对象必须实现IConvertible


我为我的无知提前道歉,我自学成才,每天都在学习新的东西。在大约127年零4天的时间里,我可能能够理解这一点。

您希望向数据库添加值,而不是相应的对象

像这样更正代码

        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;

在存储过程中,@Page是浮点类型,但在click方法中,将tbPage.text指定给该值。您必须强制转换到正确的类型。

除了传递
SelectedItem.Value
而不是
SelectedItem
本身之外,如果您使用
块(如下所示)在
中执行命令,您就不必担心保持连接打开。您还可以使用
Parameters.AddWithValue()
删除大量行


努内斯帕斯卡尔-非常感谢你,这是一个著名的作品。我需要最后一件事来完成它。完成插入后,我有一个gridview(gridview1),需要根据屏幕上的信息进行刷新。可以合并到同一代码中吗?如果gridview已绑定到数据源,则只需调用
DataBind
        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;
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();
}