use*_*921 0 c# sql sql-server asp.net type-conversion
好吧,所以我有以下SQL查询:
query.CommandText = "SELECT FirstName, LastName, Age FROM Characters WHERE LastName LIKE '"+name+"' ORDER BY Age";
Run Code Online (Sandbox Code Playgroud)
并且这个循环将结果存储在字符串"output"中
while (reader.Read()) {
output = output + reader.GetString(0) + reader.GetString(1) + reader.GetString(2).ToString();
}
Run Code Online (Sandbox Code Playgroud)
但是,对于第三个属性age,即int,我得到一个错误
无法将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);
Run Code Online (Sandbox Code Playgroud)
如果列可以Age为空,则需要先使用IsDBNull,也可以使用int?then:
int? age = null;
if(!reader.IsDBNull(2))
age = reader.GetInt32(2);
Run Code Online (Sandbox Code Playgroud)
如果要按名称而不是通过索引访问字段,请使用GetOrdinal:
int ageIndex = reader.GetOrdinal("Age");
int? age = null;
if(!reader.IsDBNull(ageIndex))
age = reader.GetInt32(ageIndex);
Run Code Online (Sandbox Code Playgroud)
作为一个重要的一点,你在这里打开sql注入:
query.CommandText = @"SELECT FirstName, LastName, Age
FROM Characters
WHERE LastName LIKE '" + name + "' ORDER BY Age";
Run Code Online (Sandbox Code Playgroud)
因为你正在连接sql查询.而是使用sql参数:
query.CommandText = @"SELECT FirstName, LastName, Age
FROM Characters
WHERE LastName LIKE '%' + @LastName + '%'
ORDER BY Age";
query.Parameters.Add("@LastName", SqlDbType.NVarChar).Value = name;
Run Code Online (Sandbox Code Playgroud)
(如果你不想找到你不需要使用的子串LIKE,那么你可以使用=)
| 归档时间: |
|
| 查看次数: |
803 次 |
| 最近记录: |