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)
答案 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。