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 clientId = (int)reader["ClientID"];
如果结果为可空的整数(或任何其他类型),则转换如下:
int? clientId = (reader["ClientID"] is DBNull) ? (int?)null : (int)reader["ClientID"];
如果这对你不起作用,你应该发布你得到的异常消息。
try with
Convert.ToInt32(reader["ClientID"].ToString()] ,
可能会抛出异常,所以最好使用int。如我在评论中问你的TryParse方法,如果这些字段可以在数据库中为空,那么你应该使用空类型