SQL,C# - 不能将int32转换为字符串吗?

时间:2014-07-03 15:17:30

标签: c# asp.net sql sql-server type-conversion

好的,我有以下SQL查询:

 query.CommandText = "SELECT FirstName, LastName, Age FROM Characters WHERE LastName LIKE   '"+name+"' ORDER BY Age";

这个循环将结果存储在字符串"输出"

while (reader.Read()) {
    output = output + reader.GetString(0) + reader.GetString(1) + reader.GetString(2).ToString();
}

但是,对于第三个属性age,这是一个int,我得到一个错误

  

无法将System.Int32转换为System.String

类型

如您所见,我已经尝试使用int.ToString()函数解决此问题,但我仍然遇到同样的错误。我在这做错了什么?提前谢谢!

2 个答案:

答案 0 :(得分:6)

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,那么您可以使用=

答案 1 :(得分:1)

同意蒂姆的意见,但

reader[2].ToString();
如果您更改选择顺序,

可能会更通用,也可能会减少错误。

以下蒂姆评论:

reader["Age"].ToString();