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日でこれが理解できるかもしれません。

4

3 に答える 3

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;
于 2013-02-21T18:13:09.313 に答える
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();
}
于 2013-02-21T18:19:25.103 に答える
0

ストアドプロシージャでは、@ Pageはfloatタイプですが、clickメソッドでは、値にtbPage.textを割り当てています。正しいタイプにキャストする必要があります。

于 2013-02-21T18:17:42.777 に答える