在一个程序集中到达一行代码

时间:2011-03-10 16:17:10

标签: c# .net vb.net

看看这个:

For Each info As FieldInfo In AssemblyInstance.GetType().GetFields(flags)
  If info.FieldType.FullName = "System.Data.SqlClient.SqlDataAdapter" Then
    da = CType(info.GetValue(AssemblyInstance), SqlDataAdapter)
  End If
Next

该程序集是一个class.vb组件,其中包含以下代码行:

Me.SqlDeleteCommand1.CommandText = "DELETE FROM [CLASS] WHERE (([MAIN FACILITY USED] = @Original_MAIN_FACILITY_USED) " & _
    "AND ([START DATE] = @Original_START_DATE) AND ([CentreId] = @Original_CentreId) " & _
    "AND ([RowVer] = @Original_RowVer))"
Me.SqlDeleteCommand1.Connection = Me.SqlConnection1
Me.SqlDeleteCommand1.Parameters.AddRange(New System.Data.SqlClient.SqlParameter() {New System.Data.SqlClient.SqlParameter("@Original_MAIN_FACILITY_USED", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "MAIN FACILITY USED", System.Data.DataRowVersion.Original, Nothing), New System.Data.SqlClient.SqlParameter("@Original_START_DATE", System.Data.SqlDbType.DateTime, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "START DATE", System.Data.DataRowVersion.Original, Nothing), New System.Data.SqlClient.SqlParameter("@Original_CentreId", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "CentreId", System.Data.DataRowVersion.Original, Nothing), New System.Data.SqlClient.SqlParameter("@Original_RowVer", System.Data.SqlDbType.Timestamp, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "RowVer", System.Data.DataRowVersion.Original, Nothing)})

我有两行代码来访问上述代码的部分内容。 第一个是:

da.SelectCommand.CommandText

我正确地获得了以下代码行:

"DELETE FROM [CLASS] WHERE (([MAIN FACILITY USED] = @Original_MAIN_FACILITY_USED) " & _
    "AND ([START DATE] = @Original_START_DATE) AND ([CentreId] = @Original_CentreId) " & _
    "AND ([RowVer] = @Original_RowVer))"

但问题是我还需要以下部分:

Me.SqlDeleteCommand1.Parameters.AddRange(New System.Data.SqlClient.SqlParameter() {New System.Data.SqlClient.SqlParameter("@Original_MAIN_FACILITY_USED", System.Data.SqlDbType.NVarChar, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "MAIN FACILITY USED", System.Data.DataRowVersion.Original, Nothing), New System.Data.SqlClient.SqlParameter("@Original_START_DATE", System.Data.SqlDbType.DateTime, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "START DATE", System.Data.DataRowVersion.Original, Nothing), New System.Data.SqlClient.SqlParameter("@Original_CentreId", System.Data.SqlDbType.Int, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "CentreId", System.Data.DataRowVersion.Original, Nothing), New System.Data.SqlClient.SqlParameter("@Original_RowVer", System.Data.SqlDbType.Timestamp, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "RowVer", System.Data.DataRowVersion.Original, Nothing)})

我如何获得上述代码?我试过da.SelectCommand.Parameters.ToString()但是没有用!伙计们还有其他解决方案吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下:见http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.aspx

可以使用以下命令检索该集合:da.SelectCommand.Parameters

您可以对此集合执行for循环,因为您可以使用索引或其名称索引每个参数(可以使用Count检索大小)。

更好的是,您可以使用linq扩展Cast将集合强制转换为可枚举的SqlParameter。

没有代码,因为我不知道VB ^^