2

このクラスを変更して、自動インクリメント付きの主キー フィールドを含めることができません。このスキーマは、サードパーティのライブラリを介して産業機器からデータを取得します。このスキームは、これらのライブラリを提供した会社によって提供されました。このデータ レイヤーに主キー フィールドを追加する必要があります。データ アクセスの別のレイヤーを配置する必要があります。リンクされたレポートを介してこのデータを取得するためのアプリケーション。

const string connectionString = 
    "Data Source=(local);Initial Catalog=MyDB;Integrated Security=true";

using (var connection = new SqlConnection(connectionString))
{
    connection.Open();

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

    int[] handles = EasyDAClient.DefaultInstance.SubscribeMultipleItems(
        new[]
            {
                new DAItemGroupArguments("", "MyOPCServer.1", "OPCItem01", 1000, null),
                new DAItemGroupArguments("", "MyOPCServer.1", "OPCItem02", 1000, null),
                new DAItemGroupArguments("", "MyOPCServer.1", "OPCItem03", 1000, null),
                new DAItemGroupArguments("", "MyOPCServer.1", "OPCItem04", 1000, null)
            }, 
        (_, eventArgs) =>
            {
                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, "MyTable");
                }
            }
        );

現在のスキームに主キー フィールドを含める提案はありますか?

4

2 に答える 2

0
const string connectionString =  
            "Data Source=(local);Initial Catalog=MyDB;Integrated Security=true"; 

using (var connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 

    // Create all necessary ADO.NET objects. 
    var adapter = new SqlDataAdapter("SELECT * FROM MyTable", connection); 
    var dataSet = new DataSet(); 
    adapter.FillSchema(dataSet, SchemaType.Source, "MyTable"); 
    adapter.InsertCommand = new SqlCommandBuilder(adapter).GetInsertCommand(); 
    DataTable table = dataSet.Tables["MyTable"]; 
        DataColumn[0] key1 = dataSet.Tables["MyTable"].Columns["ItemID"];
        key1[0].AutoIncrement = true;
        key1[0].AutoIncrementSeed = 1;
        key1[0].AutoIncrementStep = 1;
        dataSet.Tables["MyTable"].PrimaryKey = key1;

        key1 = null;

    int[] handles = EasyDAClient.DefaultInstance.SubscribeMultipleItems( 
        new[] 
            { 
                new DAItemGroupArguments("", "MyOPCServer.1", "OPCItem01", 1000, null), 
                new DAItemGroupArguments("", "MyOPCServer.1", "OPCItem02", 1000, null), 
                new DAItemGroupArguments("", "MyOPCServer.1", "OPCItem03", 1000, null), 
                new DAItemGroupArguments("", "MyOPCServer.1", "OPCItem04", 1000, null) 
            },  
        (_, eventArgs) => 
            { 
                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, "MyTable"); 
                } 
            } 
        ); 
}
于 2012-08-03T13:17:30.770 に答える
0

こんにちは、このコードで試すことができます:

DataColumn idColumn = new  DataColumn();
idColumn.DataType = System.Type.GetType("System.Int32");
idColumn.ColumnName = "id";
table.Columns.Add(idColumn);

//Just if you want define AutoIncrement 
//idColumn.AutoIncrement = true; 

DataColumn [] keys = new DataColumn [1];
keys[0] = idColumn;
table .PrimaryKey = keys;

このコードを次の行の後に挿入します。

DataTable table = dataSet.Tables["MyTable"];
于 2012-08-03T12:24:54.760 に答える