2013-03-14 87 views
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转换为整型,并将性别转换为字符请帮助!我已经尝试过上述转换。我试过这aswel类型Int Cant转换的参数

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)

+0

删除'List Contacts = new List ();'在while循环之外。 – 2013-03-14 18:19:11

+0

可以clientid或性别在数据库中为空? – TalentTuner 2013-03-14 18:20:26

+0

“不工作”非常含糊。请描述您看到的错误。 – 2013-03-14 18:20:42

回答

2

如果您的存储过程返回int参数(应该),你应该做这样的

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

转换如果结果为空整数(或任何其他类型为此事),转换会是这样:

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

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

+0

int clientId =(int)reader [“ClientID”]; char gender =(char)reader [“Gender”];这可以起作用thanx多 – 2013-03-14 18:32:55

+0

您可以在* ultra *罕见的情况下将您的字段“ClientID”更改为“int”以外的其他字符,并将* else'部分更改为'reader [“ClientID”],不要*抛出无效的转换异常。 – 2013-03-15 14:49:58

0

尝试

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

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

相关问题