如何在C#中通过SQL从SAP数据库读取数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C#中通过SQL从SAP数据库读取数据相关的知识,希望对你有一定的参考价值。
我的任务是将非常老的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#。从我的数据库中获取(只读)数据的最简单方法对我来说非常有用。我必须在程序中实现哪个库?或当今最简单和最新的技术是什么?
先谢谢您。
EDIT:============================================ ===
command.ExecuteReader()引发异常:无效的对象名称'T_ECAD_SAP_Daten'---但是Server Explorer确实向我显示了该表名称。
解决方案:我不知道为什么,但是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'
答案
我不知道这是不是真正的SAP数据库,或者SAP使用的是普通的MSSQL / mysql数据库。
我的解决方案:
private static SqlConnection conn;
public static DataTable ECadSQL_Abfrage(double number)
Connect();
SqlCommand command = conn.CreateCommand();
command.CommandText = "SELECT * FROM [005SAPTables_DBO].[T_ECAD_SAP_Daten] WHERE ArticleNumber = '" + number + "'";
DataSet ds = new DataSet();
var da = new SqlDataAdapter(command);
// .Fill opens and closes the connection by itself, therefore the connect() and close() functions are unnecessary
da.Fill(ds);
DataTable dt = ds.Tables[0];
// string st1 = dt.Rows[0]["PP_Status"].ToString();
// string st2 = dt.Rows[0]["Class"].ToString();
Close();
return dt;
public static void Connect()
string server = "******.patec.group";
string database = "005SAPTABLES";
string username = "********";
string password = "*****";
conn = new SqlConnection("Data Source=" + server + ";Initial Catalog=" + database + ";User Id=" + username + ";Password=" + password + ";");
//conn.Open();
public static void Close()
//conn.Close();
conn.Dispose();
以上是关于如何在C#中通过SQL从SAP数据库读取数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在swift ios中通过键值读取子数据或过滤firebase数据
在 python 中通过 RS232 到 USB 电缆读取秤数据