[英]SQL, C# - Can't convert int32 to string?
好的,所以我有以下SQL查询:
query.CommandText = "SELECT FirstName, LastName, Age FROM Characters WHERE LastName LIKE '"+name+"' ORDER BY Age";
并且此循环将结果存储在字符串“ output”中
while (reader.Read()) {
output = output + reader.GetString(0) + reader.GetString(1) + reader.GetString(2).ToString();
}
但是,对于第三个属性age
,它是一个整数,我得到一个错误
无法将System.Int32转换为System.String类型
如您所见,我已经尝试通过使用int.ToString()
函数来解决此问题,但是我仍然遇到相同的错误。 我在这里做错了什么? 提前致谢!
reader.GetString(2).ToString()
是没有意义的,它已经是字符串,或者您使用了错误的方法。 既然您已经提到它是int
使用的reader.GetInt32
:
string firstName = reader.GetString(0);
string larstName = reader.GetString(1);
int age = reader.GetInt32(2);
output = output + string.Format("{0}{1}{2}", firstName, lastName, age);
如果“ Age
”列可为空,则需要首先使用IsDBNull
,也可以使用int?
然后:
int? age = null;
if(!reader.IsDBNull(2))
age = reader.GetInt32(2);
如果要通过名称而不是通过索引访问字段,请使用GetOrdinal
:
int ageIndex = reader.GetOrdinal("Age");
int? age = null;
if(!reader.IsDBNull(ageIndex))
age = reader.GetInt32(ageIndex);
重要的是,您可以在此处进行sql-injection:
query.CommandText = @"SELECT FirstName, LastName, Age
FROM Characters
WHERE LastName LIKE '" + name + "' ORDER BY Age";
因为您是串联sql查询。 而是使用sql-parameters:
query.CommandText = @"SELECT FirstName, LastName, Age
FROM Characters
WHERE LastName LIKE '%' + @LastName + '%'
ORDER BY Age";
query.Parameters.Add("@LastName", SqlDbType.NVarChar).Value = name;
(如果您不想同时查找不需要使用LIKE
子字符串,则可以使用=
)
同意蒂姆,但类似
reader[2].ToString();
如果您更改选择顺序,则可能会更通用,也不会出错。
以下蒂姆评论:
reader["Age"].ToString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.