C# 在这里测试并成功,但无论如何,感谢您的评论。确实,非常简单,我无法看到它,正在尝试其他方法,并完全使用该方法更改变量。谢谢安德烈·布代,你救了我一天;)确切地说,它是如此简单,以至于我无法看到它,试图做其他的事情,并完全使用该方法改变变量。谢谢安德烈·布代

C# 在这里测试并成功,但无论如何,感谢您的评论。确实,非常简单,我无法看到它,正在尝试其他方法,并完全使用该方法更改变量。谢谢安德烈·布代,你救了我一天;)确切地说,它是如此简单,以至于我无法看到它,试图做其他的事情,并完全使用该方法改变变量。谢谢安德烈·布代,c#,sql,datetime,dataset,C#,Sql,Datetime,Dataset,在这里测试并成功,但无论如何,感谢您的评论。确实,非常简单,我无法看到它,正在尝试其他方法,并完全使用该方法更改变量。谢谢安德烈·布代,你救了我一天;)确切地说,它是如此简单,以至于我无法看到它,试图做其他的事情,并完全使用该方法改变变量。谢谢安德烈·布代,你救了我一天;) using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using OpcLabs.EasyOpc.


在这里测试并成功,但无论如何,感谢您的评论。确实,非常简单,我无法看到它,正在尝试其他方法,并完全使用该方法更改变量。谢谢安德烈·布代,你救了我一天;)确切地说,它是如此简单,以至于我无法看到它,试图做其他的事情,并完全使用该方法改变变量。谢谢安德烈·布代,你救了我一天;)
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using OpcLabs.EasyOpc.DataAccess;

namespace LogAsStringToSql
{
    class Program
    {
        static void Main()
        {
            const string connectionString =
                "Data Source=.\\SQLEXPRESS;Initial Catalog=QuickOPCExamples;Integrated Security=true";

            Console.WriteLine("Starting up...");
            using (var connection = new SqlConnection(connectionString))
            {
                connection.Open();

                // Create all necessary ADO.NET objects.
                var adapter = new SqlDataAdapter("SELECT * FROM SimpleLog", connection);
                var dataSet = new DataSet();
                adapter.FillSchema(dataSet, SchemaType.Source, "SimpleLog");
                adapter.InsertCommand = new SqlCommandBuilder(adapter).GetInsertCommand();
                DataTable table = dataSet.Tables["SimpleLog"];

                Console.WriteLine("Logging for 30 seconds...");
                // Subscribe to an OPC item, using an anonymous method to process the notifications.
                int[] handles = EasyDAClient.DefaultInstance.SubscribeMultipleItems(
                    new[]
                        {
                            new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Incrementing (1 s)", 100, null),
                            new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Ramp (10 s)", 1000, null),
                            new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Register_BSTR", 1000, null),
                            new DAItemGroupArguments("", "OPCLabs.KitServer.2", "Simulation.Register_BOOL", 1000, null)
                        },
                    (_, eventArgs) =>
                    {
                        Console.Write(".");
                        // In this example, we only log valid data. Production logger would also log errors.
                        if (eventArgs.Vtq != null)
                        {
                            // Fill a DataRow with the OPC data, and add it to a DataTable.
                            table.Rows.Clear();
                            DataRow row = table.NewRow();
                            row["ItemID"] = eventArgs.ItemDescriptor.ItemId;
                            row["Value"] = eventArgs.Vtq.Value; // The DataRow will make the conversion to a string.
                            row["Timestamp"] = (eventArgs.Vtq.Timestamp < (DateTime)SqlDateTime.MinValue)
                                                   ? (DateTime)SqlDateTime.MinValue
                                                   : eventArgs.Vtq.Timestamp;
                            row["Quality"] = (short)eventArgs.Vtq.Quality;
                            table.Rows.Add(row);

                            // Update the underlying DataSet using an insert command.
                            adapter.Update(dataSet, "SimpleLog");
                        }
                    }
                    );
                System.Threading.Thread.Sleep(60 * 1000);
                Console.WriteLine();

                Console.WriteLine("Shutting down...");
                EasyDAClient.DefaultInstance.UnsubscribeMultipleItems(handles);
            }

            Console.WriteLine("Finished.");
        }
    }
}
row["Timestamp"] = (eventArgs.Vtq.Timestamp < (DateTime)SqlDateTime.MinValue)
                                                   ? (DateTime)SqlDateTime.MinValue
                                                   : eventArgs.Vtq.Timestamp;
row["Timestamp"] = (eventArgs.Vtq.Timestamp < (DateTime)SqlDateTime.MinValue)
                                                   ? (DateTime)SqlDateTime.MinValue
                                                   : eventArgs.Vtq.Timestamp.ToLocalTime();