【问题标题】:Using a string output to set identifier使用字符串输出设置标识符
【发布时间】:2016-02-02 03:31:12
【问题描述】:
Public Class Functions
    Inherits BaseClass
    Public Function KesDetails(KesID As Integer) As KesH

        Dim Sql As New SqlClass
        Dim lRd As DataTableReader


        Sql.OpenConnection()

        Sql.lCmd.CommandText = " SELECT"
        Sql.lCmd.CommandText &= " Case WHEN KAHStatus = 'M' THEN 'LULUS'  ELSE cast(DATEDIFF(Day, KAHCreatedOn, GetDate()) as varchar(10)) END As DayCount"
        Sql.lCmd.CommandText &= " ,KAHID,KAH_AKJID,KAHCreatedBy,KAHCreatedOn"
        Sql.lCmd.CommandText &= " ,KAHLokasi,KAHHirarki,KAHPenjaga,KAHBertanggungjawab,KAHInden,KAHMelulus,KAH_KAJID,KAJNAMA,G.FPNoTender,G.FPNoKontrak,G.FPTajukProjek,G.FPKontrakNamaSyarikat,KAHUpdatedOn"
        Sql.lCmd.CommandText &= " FROM HartaMajlis..KejuruteraanArahanH A "
        Sql.lCmd.CommandText &= " LEFT JOIN HartaMajlis..KejuruteraanArahanProd B ON A.KAH_KAPID=B.KAPID"
        Sql.lCmd.CommandText &= " LEFT JOIN HartaMajlis..AduanKejuruteraan C ON A.KAH_AKJID=C.AKJProjekID"
        Sql.lCmd.CommandText &= " LEFT JOIN hartamajlis..hartabangunan D ON C.AKJ_ITEMID = D.HTBgnID"
        Sql.lCmd.CommandText &= " LEFT JOIN hartamajlis..KejuruteraanArahanJenis E ON A.KAH_KAJID = E.KAJID"
        Sql.lCmd.CommandText &= " LEFT JOIN hartamajlis..KejuruteraanArahanHirarki F ON A.KAHHirarki = F.KAHHID"
        Sql.lCmd.CommandText &= " LEFT JOIN hartamajlis..FailProjek G ON F.KAHH_FKJTenderNo = G.FPNoTender"
        Sql.lCmd.CommandText &= " WHERE A.KAHDeleted<>'Y'"
        Sql.lCmd.CommandText &= " AND A.KAHID = " & KesID
        Sql.lCmd.CommandText &= " ORDER BY A.KAHUpdatedON DESC"

        lRd = Sql.QueryData().CreateDataReader

        Dim lsData As New KesH

        If lRd.Read() Then
            'lsData.DayCount = Convert.ToString(lRd("DayCount"))
            'lsData.KAHID = Convert.ToInt32(lRd("KAHID"))
            'lsData.KAH_AKJID = Convert.ToString(lRd("KAH_AKJID"))
            'lsData.KAHCreatedOn = Convert.ToString(lRd("KAHCreatedOn"))
            'lsData.KAHLokasi = Convert.ToString(lRd("KAHLokasi"))
            'lsData.KAHCreatedBy = Convert.ToString(lRd("KAHCreatedBy"))
            'lsData.KAHLokasi = Convert.ToString(lRd("KAHLokasi"))
            'lsData.KAHHirarki = Convert.ToString(lRd("KAHHirarki"))
            'lsData.KAHPenjaga = Convert.ToString(lRd("KAHPenjaga"))
            'lsData.KAHBertanggungjawab = Convert.ToString(lRd("KAHBertanggungjawab"))
            'lsData.KAHInden = Convert.ToString(lRd("KAHInden"))
            'lsData.KAHMelulus = Convert.ToString(lRd("KAHMelulus"))
            'lsData.KAH_KAJID = Convert.ToString(lRd("KAH_KAJID"))
            'lsData.KAJNAMA = Convert.ToString(lRd("KAJNAMA"))
            'lsData.FPKontrakNamaSyarikat = Convert.ToString(lRd("FPKontrakNamaSyarikat"))
            'lsData.FPNoKontrak = Convert.ToString(lRd("FPNoKontrak"))
            'lsData.FPNoTender = Convert.ToString(lRd("FPNoTender"))
            'lsData.KAHUpdatedOn = Convert.ToDateTime(lRd("KAHUpdatedOn"))

            Dim properties As PropertyInfo() = GetType(KesH).GetProperties()
            For Each Names As PropertyInfo In properties
                If Names.PropertyType = GetType(String) Or Names.PropertyType = GetType(Integer) Or Names.PropertyType = GetType(DateTime) Then
                    MsgBox(Names.Name & Names.PropertyType.ToString)
                    lsData.(Names.Name) = lRd(Names.Name)

                End If
            Next

        End If

        Sql.CloseConnection()
        Return lsData
    End Function
End Class

我没有键入和声明变量并一一分配 lrd(...),而是创建了一个循环函数来分配,但是缺少的另一件事是使用 name.Names 的输出声明 lsData ,任何想法我该如何解决这个问题,已经 5 个小时了,我尝试解决这个问题并一遍又一遍地挠头直到流血,或者是否有任何其他方式/方法可以在不声明和分配 lrd(...) 的情况下循环此问题。非常感谢你们。

【问题讨论】:

    标签: vb.net model-view-controller sqldatareader sqlconnection


    【解决方案1】:

    一旦开始使用反射,就必须继续这样做。您不能神奇地将包含名称的String 转换为标识符。您可以使用PropertyInfo 对象通过调用其SetValue 方法来设置对象的属性值,例如

    myPropertyInfo.SetValue(targetObject, value)
    

    相当于:

    targetObject.MyProperty = value
    

    【讨论】:

    • 非常感谢您的回复,我会尝试搜索,之前没有弄乱过setvalue:))
    • 你有没有在我的情况下使用设置值的想法。
    • 查看我添加的示例。
    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    相关资源
    最近更新 更多