Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Ole Db通信在powershell中工作,而不是在c中#_C#_Powershell_Oledb - Fatal编程技术网

C# Ole Db通信在powershell中工作,而不是在c中#

C# Ole Db通信在powershell中工作,而不是在c中#,c#,powershell,oledb,C#,Powershell,Oledb,我试图通过Ole Db HDA从ABB 800xa historian接收信息。我在powershell中有一个工作脚本,但当我在C#visual studio控制台应用程序项目中执行相同操作时,我会得到一个退出代码0xc0000374 Powershell脚本和我的c代码之间有什么区别? 注意:在C#中,通过Ole Db的连接可以工作,有些命令可以工作,但有些命令不行 我的Powershell脚本: clear-host $objConn = New-Object System.Data.Ol

我试图通过Ole Db HDA从ABB 800xa historian接收信息。我在powershell中有一个工作脚本,但当我在C#visual studio控制台应用程序项目中执行相同操作时,我会得到一个退出代码0xc0000374

Powershell脚本和我的c代码之间有什么区别? 注意:在C#中,通过Ole Db的连接可以工作,有些命令可以工作,但有些命令不行

我的Powershell脚本:

clear-host
$objConn = New-Object System.Data.OleDb.OleDbConnection ("Provider=ABB OLE DB Provider for HT;Persist Security Info=False;User ID="";Data Source="";Location="";Mode=ReadWrite;Extended Properties=""")
$sqlCommand = New-Object System.Data.OleDb.OleDbCommand("GET_HISTORY(OBJECTHELPER=History Log Template Dion)")
$sqlCommand.Connection = $objConn
$objConn.open()
write-host $sqlCommand.CommandText
$reader = $sqlCommand.ExecuteReader()
$Counter = $Reader.FieldCount
while ($Reader.Read()) {
    for ($i = 0; $i -lt $Counter; $i++) {
        @{ $Reader.GetName($i) = $Reader.GetValue($i); }
    }
}
$reader.Close()
$sqlCommand.Dispose()
$objConn.close()
$objConn.Dispose()
我的C代码

static void Main(字符串[]args)
{
字符串connetionString=null;
OLEDB连接cnn;
OleDbCommand cmd;
字符串sql=null;
OLEDB数据读取器;
connetionString=“Provider=ABB OLE DB Provider for HT;持久化安全信息=False;用户ID=\“\”;数据源=\“\”;位置=\“\”;模式=ReadWrite;扩展属性=\“\”;
//对象助手
sql=“获取历史记录(OBJECTHELPER=历史记录模板Dion)”;
cnn=新的OLEDB连接(连接字符串);
尝试
{
cmd=新的OleDbCommand(sql、cnn);
cnn.Open();
reader=cmd.ExecuteReader();
Console.WriteLine(“值:”);
while(reader.Read())
{
对于(int i=0;i
经过一个下午的尝试后,我发现,在针对.net 4.0时,System.Data.OleDb的功能与预期的一样。所有其他经过测试的.net版本(4.5、4.6和4.7.2)都无法运行。

经过一个下午的尝试后,我发现,当以.net 4.0为目标时,System.Data.OleDb的功能与预期一致。所有其他经过测试的.net版本(4.5、4.6和4.7.2)dit都不工作。

请参阅以下内容:。@DionBartelen您似乎发布了一个
异常
代码。您将其包装在一个
try catch
中,异常消息告诉您什么?在搜索了
异常
代码后,我找到了这篇相关文章:()@RyanWilson没有异常代码,因为程序退出时带有退出代码0x0000374。我第一次在google上发现这可能是堆内存问题,但由于powershell确实可以工作,我对此表示怀疑。请参阅以下内容:。@DionBartelen看起来您发布了一个
异常。您将其包装在一个
try catch
中,异常消息告诉您什么?在搜索了
异常
代码后,我找到了这篇相关文章:()@RyanWilson没有异常代码,因为程序退出时带有退出代码0x0000374。我第一次在google上发现这可能是堆内存问题,但因为powershell确实有效,我对此表示怀疑。
static void Main(string[] args)
        {
            string connetionString = null;
            OleDbConnection cnn;
            OleDbCommand cmd;
            string sql = null;
            OleDbDataReader reader;

            connetionString = "Provider=ABB OLE DB Provider for HT;Persist Security Info=False;User ID=\"\";Data Source=\"\";Location=\"\";Mode=ReadWrite;Extended Properties=\"\"";

            //OBJECTHELPER
            sql = "GET_HISTORY(OBJECTHELPER=History Log Template Dion)";

            cnn = new OleDbConnection(connetionString);

            try
            {
                cmd = new OleDbCommand(sql, cnn);
                cnn.Open();
                reader = cmd.ExecuteReader();
                Console.WriteLine("Values:");
                while (reader.Read())
                {
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        Console.WriteLine(reader.GetName(i) + " - " + reader.GetValue(i));
                    }
                }
                reader.Close();
                cmd.Dispose();
                cnn.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error while executing command 2 !");
                Console.WriteLine(ex.Message);
            }

            Console.ReadLine();
        }