gpt4 book ai didi

c# - 无法将类型为 'System.Int32' 的对象转换为 DataReader.GetString() 中的类型 'System.String'

转载 作者:太空狗 更新时间:2023-10-29 18:08:21 28 4
gpt4 key购买 nike

我试图将数据从数据库添加到组合框。

        try
{
SqlCeCommand com = new SqlCeCommand("select * from Category_Master", con);
SqlCeDataReader dr = com.ExecuteReader();
while(dr.Read()){
string name = dr.GetString(1);
cmbProductCategory.Items.Add(name);
}
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message, System.Windows.Forms.Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}

我得到以下异常:

Unable to cast object of type 'System.Int32' to type 'System.String'

我在这里错过了什么?

最佳答案

您的列没有 string 类型。显然它是 int。所以使用:

dr.getInt32(1).ToString()

甚至

dr.GetValue(1).ToString()

在数据库中键入更改应该更稳健。

作为某种一般性建议,我至少会尝试遵循:

  • 只选择您需要的。这主要是出于性能原因您必须明确说明列名的原因,因此如果您以不兼容的方式更改架构,至少会出现一个合理的错误。
  • 使用名称访问字段,例如

    dr.GetGuid(dr.GetOrdinal("id"))

    这样的事情也可以通过扩展方法很好的解决:

    public T GetFieldValue<T>(this DbDataReader reader, string columnName)
    {
    return reader.GetFieldValue<T>(reader.GetOrdinal(columnName));
    }

旁注:包括堆栈跟踪(或至少说明异常来自代码中的哪一行)可能对其他试图帮助您的人有所帮助。正如您可以从疯狂的猜测中看到的,罪魁祸首可能是什么。我的猜测是堆栈跟踪看起来有点像这样:

SqlDataReader.GetString
YourCode.YourMethod

GetString 看起来或多或少像这样:

public string GetString(int index)
{
return (string) GetValue(index);
}

关于c# - 无法将类型为 'System.Int32' 的对象转换为 DataReader.GetString() 中的类型 'System.String',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19582256/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com