C# 数据为空。在连接C.net中的两个表后,无法对null值调用此方法或属性

C# 数据为空。在连接C.net中的两个表后,无法对null值调用此方法或属性,c#,sql-server,null,C#,Sql Server,Null,在代码中加入表后,错误数据为空。无法在出现空值时调用此方法或属性 请看一下我的密码,请帮忙。我试图在谷歌上寻找答案,但仍然没有得到我想要做的 以下是导致上述错误的代码: private static string m_sConnectionString = ConfigurationManager.ConnectionStrings["NomsConnection"].ConnectionString; private static string m_sReport = "SELECT

在代码中加入表后,错误数据为空。无法在出现空值时调用此方法或属性

请看一下我的密码,请帮忙。我试图在谷歌上寻找答案,但仍然没有得到我想要做的

以下是导致上述错误的代码:

private static string m_sConnectionString = ConfigurationManager.ConnectionStrings["NomsConnection"].ConnectionString;
private static string
    m_sReport = "SELECT r.[RequestID],r.[RequestDate],r.[PARNumber],r.[StatusID],r.[PurchaseComment]"   // 0 - 4
                + ",r.[UID],r.[MyUID],r.[FullName],r.[Email]"                                         // 5 - 8
                + ",r.[EntityName],r.[DepartmentName],r.[DepartmentID]"                                 // 9 - 11
                + ",r.[LastBy]"                                                                         // 12
                + ",r.[ProgramID],r.[ProgramCode],r.[ProgramName],r.[CostCenterCode]"                   // 13 - 16
                + ",p.[PartDesc],p.[SupplierID],p.[AccountType],p.[CurrName],p.[PartQuantity],p.[PiecePrice]"
                + "FROM [NOP_PR].[dbo].[Requests] r "
                + "JOIN [NOP_PR].[dbo].[Parts] p on p.[RequestID] = r.[RequestID]"
                + "WHERE [CountryName] IN ('Philippines')";




 public static List<NomsPRRequest> LoadPRRequestFromDB(DateTime from, DateTime to) {
            string sSrcipt = m_sReport + "and [RequestDate] between '" + from.ToString("yyyy-MM-dd HH:mm:ss") + "' and '" + to.ToString("yyyy-MM-dd HH:mm:ss") + "'";
            Dictionary<long, NomsPRRequest> data = new Dictionary<long, NomsPRRequest>();
            long key;
            double dAmount;

        using (SqlConnection con = new SqlConnection(m_sConnectionString)) {
            con.Open();

            using (SqlCommand command = new SqlCommand(sSrcipt, con)) {
                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read()) {
                    key = reader.GetInt64(0);
                    if (!data.ContainsKey(key)) {
                        data.Add(key, new NomsPRRequest() {
                            RequestID = key
                            ,RequestDate = reader.GetDateTime(1)
                            ,PARNumber = reader.GetString(2)
                            ,StatusID = reader.GetInt64(3)
                            ,FullName = reader.GetString(7)
                            ,LastBy = reader.GetString(12)
                            ,ProgramName = reader.GetString(14)
                            ,ItemList = new List<NomsPRItem>()
                            ,TotalAmount = 0.0
                        });
                    }

                    dAmount = (double)reader.GetDecimal(21) * (double)reader.GetDecimal(22);

                    data[key].TotalAmount += dAmount;

                     data[key].ItemList.Add(new NomsPRItem() {
                        RequestID = key,
                        PartDesc = reader.GetString(17)
                        ,SupplierID = reader.GetString(18)
                        ,AccountType = reader.GetString(19)
                        ,CurrName = reader.GetString(20)
                        ,PartQuantity = (double)reader.GetDecimal(21)
                        ,PiecePrice = (double)reader.GetDecimal(22)
                        ,Amount = dAmount

                    });
                }
            }
        }

        return data.Values.ToList();

    }
}
因为我的数据库中的列[LastBy]只有空值。。我只是补充了卢安说的话:。。谢谢分享Luan

 data[key].ItemList.Add(new NomsPRItem() {
    ,RequestDate = reader.GetDateTime(1)
                ,PARNumber = reader.GetString(2)
                ,StatusID = reader.GetInt64(3)
                ,FullName = reader.GetString(7)
                ,LastBy = reader.IsDBNull(12) ? null : reader.GetString(12)
                ,ProgramName = reader.GetString(14)
                ,ItemList = new List<NomsPRItem>()
                ,TotalAmount = 0.0

});
在读取可空列的值之前,需要使用reader.IsDBNull

例如:

PartDesc = reader.IsDBNull(17) ? null : reader.GetString(17)
在读取可空列的值之前,需要使用reader.IsDBNull

例如:

PartDesc = reader.IsDBNull(17) ? null : reader.GetString(17)
在读取可空列的值之前,需要使用reader.IsDBNull

例如:

PartDesc = reader.IsDBNull(17) ? null : reader.GetString(17)
在读取可空列的值之前,需要使用reader.IsDBNull

例如:

PartDesc = reader.IsDBNull(17) ? null : reader.GetString(17)

谢谢你@luan!这就是我一直在等待的代码。@Mijevoli:如果这个答案解决了你的问题,你为什么还要等待更好的答案?我猜你不知道我说的接受是什么意思,你可以看看这里:明白了!我只是个新手!感谢您指导@TimSchmelter!谢谢你@luan!这就是我一直在等待的代码。@Mijevoli:如果这个答案解决了你的问题,你为什么还要等待更好的答案?我猜你不知道我说的接受是什么意思,你可以看看这里:明白了!我只是个新手!感谢您指导@TimSchmelter!谢谢你@luan!这就是我一直在等待的代码。@Mijevoli:如果这个答案解决了你的问题,你为什么还要等待更好的答案?我猜你不知道我说的接受是什么意思,你可以看看这里:明白了!我只是个新手!感谢您指导@TimSchmelter!谢谢你@luan!这就是我一直在等待的代码。@Mijevoli:如果这个答案解决了你的问题,你为什么还要等待更好的答案?我猜你不知道我说的接受是什么意思,你可以看看这里:明白了!我只是个新手!感谢您指导@TimSchmelter!