c# - 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 事件的组合框
解决方案
我认为问题出在@active 参数上。您会看到您已将其定义为SqlDbType.VarChar
Command.Parameters.Add("@active", SqlDbType.VarChar).Value = active;
但是在您的存储过程中,您已将其标记为@active numeric(1)
.
推荐阅读
- javascript - 单击按钮打开 Firefox 浏览器控制台
- algorithm - 如何将数据分成最小组
- python - Selenium / Python TypeError:“WebElement”对象不可迭代
- git - 未找到接收后挂钩卷曲
- matplotlib - Julia Plots: PyCall.PyError("PyImport_ImportModule\n\npyimport 找不到 Python 包 matplotlib.pyplot
- html - Bootstrap4 模态不适用于移动设备和平板电脑
- android - 当我从图库中选择图像时应用程序如何停止
- java - 添加新节点时,链表的浅表副本不反映更改
- codeigniter - 如何从codeigniter的视图中调用模型函数?
- apache-spark - 将逻辑/函数应用于 Spark Dataframe 列的“子集”