首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以使用哪个类在WinForm VB.Net EXE程序和类DLL之间传递一个“VB.Net”?

我可以使用哪个类在WinForm VB.Net EXE程序和类DLL之间传递一个“VB.Net”?
EN

Stack Overflow用户
提问于 2022-02-08 06:37:48
回答 2查看 64关注 0票数 1

我开发了一个VB.Net DLL,它可以读取PostgresOracleOleDb

为了允许这个DLL执行一些SQL命令,我向它传递一个Connection对象,并使用它执行一些SQL SELECT命令。

我现在的问题是,我希望传递包含在GridView对象中的所有数据,该对象包含在EXE程序(而不是在DLL中)中使用SQL命令获得的数据,并且用户可以进行更改。

考虑到以下约束,可以传递哪种类型的对象?

  1. 传递的参数不能作为WinForm控件作为DataGridView (DLL中没有Winform对象)。
  2. 无法用DataGridView内容填充另一个数据库的表(非表演性)
  3. 类必须是.Net程序集的一部分(不是COM,太老了)。

到目前为止,找到的唯一解决方案是使用ADOMicrosoft ActiveX Data Object Record Set,但是这个类不是.Net程序集,而在DataBase杂志上找到的解决方案不能工作,因为Field类的Items属性是只读的。

这是我的密码

代码语言:javascript
复制
    Dim rstADO As ADODB.Recordset
    rstADO = New ADODB.Recordset
    With rstADO
        .Fields.Append("EmployeeID", ADODB.DataTypeEnum.adInteger, 0, ADODB.FieldAttributeEnum.adFldKeyColumn)
        .Fields.Append("FirstName", ADODB.DataTypeEnum.adVarChar, 10, ADODB.FieldAttributeEnum.adFldMayBeNull)

        .CursorType = ADODB.CursorTypeEnum.adOpenKeyset
        .CursorLocation = ADODB.CursorLocationEnum.adUseClient
        .LockType = ADODB.LockTypeEnum.adLockPessimistic
        .Open()

        For Each row As DataGridViewRow In grid.Rows
            .AddNew()
            For i = 0 To grid.Columns.Count - 1
                .Fields(i) = row.Cells(i).Value
            Next i
            .Update()
        Next row
    End With

.Fields(i)在错误BC30526之后取消支付:'Item‘属性为'ReadOnly’。

我可以用哪一门课?

EN

Stack Overflow用户

发布于 2022-02-08 19:31:51

我使用了tramex用户提出的解决方案。

我希望提取除Edit et PDF列之外的所有列,并且需要根据DataGridView中的另一列添加一个名为cash的特殊列。

这是我的密码

代码语言:javascript
复制
Dim dt As New DataTable
Dim sName As String
Dim type As Type

Dim oSKipList() As String = {"Edit", "PDF"}
For Each col As DataGridViewColumn In grid.Columns
    sName = col.Name.Replace("Col_", "")
    If Not oSKipList.Contains(sName) Then
        type = col.CellTemplate.FormattedValueType
        dt.Columns.Add(sName, type)
    End If
Next col
dt.Columns.Add("cash", Type.GetType("System.String"))

For Each row As DataGridViewRow In grid.Rows
    Dim dr As DataRow = dt.NewRow
    Dim n = 0
    For Each col As DataGridViewColumn In grid.Columns
        sName = col.Name.Replace("Col_", "")
        If Not oSKipList.Contains(sName) Then
            Dim i = col.Index
            dr(n) = row.Cells(i).Value
            n += 1
        End If
    Next col
    dr(n) = IIf(dr("Account") = "-", "CASH", "")
    dt.Rows.Add(dr)
Next row

oExcelReport.SetDataTable(dt)

此代码的第一部分初始化列,第二部分初始化行。

这段代码在我的程序上运行得很好。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71029510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档