Int Cant Convert类型的参数

时间:2013-03-14 18:17:31

标签: c# parameters

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

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

但这也不起作用......我对存储过程读者的使用还是比较新的。我搜索过,发现没有结果(我找到的所有资源都使用上述转换为int的方法)

在你回复之前: 是的,Field,Constructor和Properties属于int类型,Char问题也是如此。 通过构造我的参数,您将看到我的构造函数类型如下 (int,string,string,string,string,list,string,enum,date,char,enum,string,string,string)

2 个答案:

答案 0 :(得分:2)

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

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

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

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

如果这不适合你,你应该发布你得到的异常消息。

答案 1 :(得分:0)

尝试

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

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