0
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 转换为整数,并将 Gender 转换为 Char 请帮助!我已经尝试了上述转换。我试过这个 aswel

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

但这也不起作用......我对存储过程阅读器的使用相当陌生。我搜索并没有找到结果(我找到的所有源都使用上述转换为int的方法)

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

4

2 回答 2

2

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

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

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

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

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

于 2013-03-14T18:21:43.970 回答
0

尝试

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

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

于 2013-03-14T18:25:00.157 回答