Int类型的参数不能转换

本文关键字:不能 转换 参数 类型 Int | 更新日期: 2023-09-27 18:03:51

public List<Client> SearchBy(string proc, string var, string value)
    {
        List<Client> clients = new List<Client>();
        var reader = dal.ExecuteProc(proc, var, value);
        while (reader.Read())
        {
            List<Contact> Contacts = new List<Contact>();
            EnumFactory.ClientType type = new EnumFactory.ClientType();
            EnumFactory.Language language = new EnumFactory.Language();
            Client c = new Client(Convert.ToInt32(reader["ClientID"]), reader["Name"].ToString(), reader["Surname"].ToString(), reader["Address"].ToString(), reader["Email"].ToString(), Contacts, reader["Email"].ToString(), type, DateTime.Now, reader(Convert.ToChar(reader["Gender"]), language, reader["AdhocNotes"].ToString(), reader["Status"].ToString(), reader["Color"].ToString());
            clients.Add(c);
        }
        return clients;
    }

所以我正在努力将ClientID转换为整数,性别转换为字符,请帮助!我已经尝试了以上的转换。我也试过了

Client c = new Client(reader(Convert.ToInt32(["ClientID"]))

但这也不起作用…我对存储过程读取器的用法相当陌生。我已经搜索并发现没有结果(我发现的所有来源都使用上述转换为int的方法)

回复前:是的,字段、构造函数和属性都是int类型,Char问题也是。通过构造参数,您将看到我的构造函数类型如下(int, string, string, string, string, string, list, string, enum, date, char, enum, string, string, string)

Int类型的参数不能转换

如果您的存储过程返回一个int参数(它应该),您应该像这样进行转换

int clientId = (int)reader["ClientID"];

如果结果为可空的整数(或任何其他类型),则转换如下:

int? clientId = (reader["ClientID"] is DBNull) ? (int?)null : (int)reader["ClientID"];

如果这对你不起作用,你应该发布你得到的异常消息。

try with

Convert.ToInt32(reader["ClientID"].ToString()] ,

可能会抛出异常,所以最好使用int。如我在评论中问你的TryParse方法,如果这些字段可以在数据库中为空,那么你应该使用空类型