繁体   English   中英

SQL,C#-无法将int32转换为字符串?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM