我遇到了一些有趣的情况。我有以下代码来填充数据库(ASP.net)中的字段值:
SqlConnection connect =
new SqlConnection(
@"conn-string");
SqlCommand toDo = new SqlCommand(InfoQuery, connect);
toDo.CommandTimeout = 6000;
connect.Open();
using (SqlDataReader reader = toDo.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
///......retrieving some fields in the same way as below
foo = reader.SafeGetString(7);
int temp = reader.SafeGetInt32(8);
///......retrieving again
}
}
connect.close()
连接建立,所有参数都正确。在 SQL Server Management Studio 中,与toDo
命令关联的查询非常完美。在程序中,当运行每个字段的temp
值(不包括 temp)时,将被检索和设置。但是在读取温度值时,我得到以下异常:
不存在数据时尝试读取无效。
这是我的扩展方法:
public static class ExtentionMethods
{
public static string SafeGetString(this SqlDataReader reader, int colIndex)
{
if (!reader.IsDBNull(colIndex))
return reader.GetString(colIndex);
return "NULL VALUE";
}
public static int SafeGetInt32(this SqlDataReader reader, int colIndex)
{
if (!reader.IsDBNull(colIndex))
return reader.GetInt32(colIndex);
return -1;
}
public static DateTime SafeGetDateTime(this SqlDataReader reader, int colIndex)
{
if (!reader.IsDBNull(colIndex))
{
try
{
}
catch
{
return new DateTime(1800, 1, 1);
}
}
return new DateTime(1800, 1, 1);
}
}
询问:
SELECT TOP 1000 [ID0]
,[Id1]
,[Id2]
,Id1+Id2+'0' AS BC
,[Id3]
,[Id4]
,[Id5]
,CAST([Date] AS nvarchar(max))
,[int]
,[Id7]
,[Id8]
,IsNull(foo,'dsf')+' '+IsNull(bar,'dsf')+', '
+IsNull(fgm,'fggf')+', fgfggf '+IsNull(gfgf,'gfgf')+
','+dfsdfsdsf+', '+dsffddf AS dsadsa
,[fg]
,[fds]
FROM tbl
inner join tbl1 on tbl1.ID=ID1
inner join tbl2 on tbl2.ID=ID2
WHERE Id4=12
问题可能是什么?