首页 > 解决方案 > C# 无法将“system.string”类型的对象转换为“system.int32”类型

问题描述

unable to cast object of type 'system.string' to type 'system.int32'检索varchar包含数据的列并尝试将其显示在 ComboBox 中时出现错误。

这是我的代码:

private void GetFinancialCatDeactivate(int active)
        {
            try
            {
                using (var Connect = new SqlConnection(connstr))
                {
                    Connect.Open();
                    using (var Command = new SqlCommand("[dbo].[spParametresFinancesTb_GetCategories]", Connect))
                    {
                        Command.CommandType = CommandType.StoredProcedure;
                        Command.Parameters.Add("@active", SqlDbType.VarChar).Value = active;
                        SqlDataReader dr = Command.ExecuteReader();
                        while (dr.Read())
                        {
                            string catlist = dr.GetString(0)

                            ComboBoxFinanceNameDeactivate.Items.Add(catlist);
                            ComboBoxFinanceNameDeactivate.Text = catlist;
                            ComboBoxFinanceDefaultNameEdit.Items.Add(catlist);
                            ComboBoxFinanceDefaultNameEdit.Text = catlist;                            

                        }
                        dr.Close();
                    }

                    Connect.Close();
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }

该代码正在执行一个存储过程,该过程位于:

ALTER PROCEDURE [dbo].[spParametresFinancesTb_GetCategories]
(
    @active numeric(1)
 )
AS
BEGIN
    BEGIN TRY
        SET NOCOUNT ON
            BEGIN
                    select category
                    from dbo.PARAMETRES_FINANCES 
                    where active = @active;
                END;
    END TRY
    BEGIN CATCH     
        SELECT
        ERROR_PROCEDURE () as ProcedureErreur,
        ERROR_MESSAGE () as MessageErreur,
        ERROR_LINE () as LigneErreur,
        ERROR_SEVERITY () as SeveriteErreur
    END CATCH
END;

错误出现在这里:ComboBoxFinanceDefaultNameEdit.Text = catlist;在代码隐藏中。

我觉得这很奇怪,因为第一个组合框没有显示错误。

以下是两个组合框的制作方式 (XAML):

<ComboBox Name="ComboBoxFinanceDefaultNameEdit" Style="{StaticResource ComboBoxStyle}" SelectionChanged="ComboBoxFinanceDefaultNameEdit_SelectionChanged"/>
<ComboBox Name="ComboBoxFinanceNameDeactivate" Grid.Column="1" Style="{StaticResource ComboBoxStyle}"/>

我尝试将其更改为ComboBoxFinanceDefaultNameEdit.Text = catlist;ComboBoxFinanceDefaultNameEdit.SelectedItem= catlist;但它并没有改变任何事情。

知道这里发生了什么吗?

我在.Net Core 3.1.101

编辑

我已更新问题以添加有关该问题的更多信息。

编辑 2

我注意到问题主要出现在我实现了 selectionchanged 事件的组合框中。没有这个事件,没有错误。仍在研究如何解决此问题。

编辑 3

我想提一下,错误显示为消息框。当我调试时,它不会抛出异常而是一个消息框。但是,数据仍显示在组合框中。出现此问题的组合框是我有 selectionchange 事件的组合框

标签: c#.net.net-corecombobox

解决方案


我认为问题出在@active 参数上。您会看到您已将其定义为SqlDbType.VarChar

 Command.Parameters.Add("@active", SqlDbType.VarChar).Value = active;

但是在您的存储过程中,您已将其标记为@active numeric(1).


推荐阅读