【发布时间】:2020-04-16 06:06:58
【问题描述】:
我的任务是将一个非常旧的 VBA 宏翻新为 .NET 程序。这个宏正在从我们的 SAP 数据库中收集数据。不幸的是,我对 SAP 以及如何从我的 C# 程序中处理它一无所知。对于这个程序,我使用的是 .NET 4.7.2。这是旧代码:
Option Private Module
Global db_005SAPTABLES As DAO.Database
Public Sub ECadSQL_Abfrage(ByVal lngZeile As Long)
Dim rsETV As DAO.Recordset
Dim MatNr As String
Dim strSQL As String
'MatNr einlesen
MatNr = Range("E" & lngZeile).Value
If MatNr = "" Then
Range("F" & lngZeile).Value = ""
Range("G" & lngZeile).Value = ""
Range("H" & lngZeile).Value = ""
Range("I" & lngZeile).Value = ""
Range("J" & lngZeile).Value = ""
Range("K" & lngZeile).Value = ""
GoTo weiter1
End If
'SQL abfrage
strSQL = "select * FROM T_ECAD_SAP_Daten where ArticleNumber = '" & MatNr & "'"
'Verbinden mit Datenbank
Connect_005SAPTABLES
Set rsETV = db_005SAPTABLES.OpenRecordset(strSQL)
'Daten auslesen
Range("F" & lngZeile).Value = rsETV.Fields("PP_Status").Value
Range("G" & lngZeile).Value = rsETV.Fields("Class").Value
Range("H" & lngZeile).Value = rsETV.Fields("Gerätetyp").Value
Range("I" & lngZeile).Value = rsETV.Fields("Kenngroesse_1").Value
Range("J" & lngZeile).Value = rsETV.Fields("Kenngroesse_2").Value
Range("K" & lngZeile).Value = rsETV.Fields("Kenngroesse_3").Value
rsETV.Close
weiter1:
End Sub
Sub Connect_005SAPTABLES()
Dim Fehlermeldung As String
Dim constr As String
On Error GoTo Connect_005SAPTABLESErrorHandler
'Verbindungsangaben zur Datenbank
constr = "DRIVER={SQL Server};SERVER=*******.patec.group;"
constr = constr & "DATABASE=005SAPTables;UID=005SAP*****;PWD=******;APP=F-Kalkulation"
'Datenbank öffnen
Set db_005SAPTABLES = OpenDatabase("005SAPTABLES", dbDriverNoPrompt, True, constr)
Exit Sub
'ErrorHandler
Connect_005SAPTABLESErrorHandler:
Fehlermeldung = "Unbehandelter Fehler in Prozedur Connect_005SAPTABLES aufgetreten " & Chr(13) & "FehlerNr. " & Err.Number & " " & Err.Description
MsgBox Fehlermeldung, vbExclamation, "Fehlermeldung"
End Sub
也许有可能根据实际技术将此代码翻译成C#。从该数据库获取(只读)数据的最简单方法对我来说非常有用。 我必须在我的程序中实现哪个库?或者当今最简单和最新的技术是什么?
提前谢谢你。
编辑:=========================================== =====
command.ExecuteReader() 引发异常:无效的对象名称 'T_ECAD_SAP_Datan' --- 但是服务器资源管理器向我显示了该表的名称。
解决方案:我不知道为什么,但是 VBA SQL 语法与 C# 有很大不同
// from VBA
SELECT * FROM T_ECAD_SAP_Daten WHERE ArticleNumber = 'E54990198'
// at C#
SELECT * FROM [005SAPTables_DBO].[T_ECAD_SAP_Daten] WHERE ArticleNumber = '54990198'
【问题讨论】:
-
我将从建立与数据库的连接开始。您拥有带有服务器名称、数据库名称和凭据的连接字符串,这是成功的一半。尝试在 View > Server Explorer 中从 Visual Studio 连接到数据库。您的 sql 查询非常简单,只有一个参数,因此您可以获得灵感,例如这里:stackoverflow.com/a/25739883/4429029.
-
在几次尝试中,我与服务器资源管理器建立了连接。非常感谢托马斯。现在我还能够以编程方式建立连接。但是我在这一行遇到了一个异常: using (SqlDataReader reader = command.ExecuteReader()) Exception: Invalid object name 'T_ECAD_SAP_Datan' 但是服务器资源管理器向我显示了该表名。在上面观看我的编辑