1

シナリオ:

Visual Studio 2010 を使用しており、データベースのサンプル アプリケーションを作成しています。これらの分光ファイルをデータベースに保存する必要があります。これらの分光ファイルは、spectrumdata オブジェクトに読み込まれます。これらのオブジェクトをデータベースに保存する予定です。オブジェクトにはさまざまな属性 (int、double、string など) があります。さらに、オブジェクトには y 成分データ値の配列も含まれます。

私はデータベースを 2 つのテーブルで構成するように設計しました (1 つはスペクトルデータ オブジェクトの属性用、もう 1 つは double 配列ポイント用のテーブルです)。ID の自動インクリメントを持つ最初のテーブルを作成しました。

データベース設計

基本的にこれらのオブジェクト値を取得し、それらをテーブル パラメーターに割り当てる、まとめたコードの一部を次に示します。

SPCFile spc = new SPCFile();
TSpectraData spectra = new TSpectraData();
spectra = spc.LoadSPC(openSPCFile.FileName);

using(SqlConnection mySqlConnect = new SqlConnection(ConfigurationManager.ConnectionStrings["DBLocal"].ConnectionString))
{
      SqlCommand command = mySqlConnect.CreateCommand();
      command.CommandText = "INSERT INTO Spectras VALUES"
                                     + "(@DateTime, "
                                     + "@Name, "
                                     + "@Version, "
                                     + "@SerialHighNumber, "
                                     + "@SerialLowNumber, "
                                     + "@Completed, "
                                     + "@SpectrometerID, "
                                     + "@GasCellID, "
                                     + "@Format, "
                                     + "@Apodization, "
                                     + "@PhaseApodization, "
                                     + "@Temperature, "
                                     + "@Pressure, "
                                     + "@NumScans, "
                                     + "@Resolution, "
                                     + "@Gain, "
                                     + "@PathLength, "
                                     + "@FirstPoint, "
                                     + "@LastPoint, "
                                     + "@MaxFrequency, "
                                     + "@MaxLocPoint, "
                                     + "@MinLocPoint, "
                                     + "@NumDataPoints, "
                                     + "@NumDataPhase, "
                                     + "@Step, "
                                     + "@IgramType)";

                //Adding parameters to command
                //Value for ID will be added automatically since it is set to auto increment

                command.Parameters.Add("@DateTime",         SqlDbType.DateTime, Int32.MaxValue);
                command.Parameters.Add("@Name",             SqlDbType.NVarChar, Int32.MaxValue);
                command.Parameters.Add("@Version",          SqlDbType.Int, Int32.MaxValue);
                command.Parameters.Add("@SerialHighNumber", SqlDbType.Int, Int32.MaxValue);
                command.Parameters.Add("@SerialLowNumber",  SqlDbType.Float, Int32.MaxValue);
                command.Parameters.Add("@Completed",        SqlDbType.Float, Int32.MaxValue);
                command.Parameters.Add("@SpectrometerID",   SqlDbType.Int, Int32.MaxValue);
                command.Parameters.Add("@GasCellID",        SqlDbType.Int, Int32.MaxValue);
                command.Parameters.Add("@Format",           SqlDbType.SmallInt, Int32.MaxValue);
                command.Parameters.Add("@Apodization",      SqlDbType.SmallInt, Int32.MaxValue);
                command.Parameters.Add("@PhaseApodization", SqlDbType.SmallInt, Int32.MaxValue);
                command.Parameters.Add("@Temperature",      SqlDbType.Float, Int32.MaxValue);
                command.Parameters.Add("@Pressure",         SqlDbType.Float, Int32.MaxValue);
                command.Parameters.Add("@NumScans",         SqlDbType.Int, Int32.MaxValue);
                command.Parameters.Add("@Resolution",       SqlDbType.Float, Int32.MaxValue);
                command.Parameters.Add("@Gain",             SqlDbType.Float, Int32.MaxValue);
                command.Parameters.Add("@PathLength",       SqlDbType.Float, Int32.MaxValue);
                command.Parameters.Add("@FirstPoint",       SqlDbType.Float, Int32.MaxValue);
                command.Parameters.Add("@LastPoint",        SqlDbType.Float, Int32.MaxValue);
                command.Parameters.Add("@MaxFrequency",     SqlDbType.Float, Int32.MaxValue);
                command.Parameters.Add("@MaxLocPoint",      SqlDbType.Int, Int32.MaxValue);
                command.Parameters.Add("@MinLocPoint",      SqlDbType.Int, Int32.MaxValue);
                command.Parameters.Add("@NumDataPoints",    SqlDbType.Int, Int32.MaxValue);
                command.Parameters.Add("@NumDataPhase",     SqlDbType.Int, Int32.MaxValue);
                command.Parameters.Add("@Step",             SqlDbType.Float, Int32.MaxValue);
                command.Parameters.Add("@IgramType",        SqlDbType.SmallInt, Int32.MaxValue);
                //Adding values to these parameters
                command.Parameters["@DateTime"].Value = DateTime.Now;
                command.Parameters["@Name"].Value = spectra.Info.Name;
                command.Parameters["@Version"].Value = spectra.Info.Version;
                command.Parameters["@SerialHighNumber"].Value = spectra.Info.SerialHighNumber;
                command.Parameters["@SerialLowNumber"].Value = spectra.Info.SerialLowNumber;
                command.Parameters["@Completed"].Value = spectra.Info.Completed;
                command.Parameters["@SpectrometerID"].Value = spectra.Info.SpectrometerID;
                command.Parameters["@GasCellID"].Value = spectra.Info.GasCellID;
                command.Parameters["@Format"].Value = (short)spectra.Info.Format;
                command.Parameters["@Apodization"].Value = (short)spectra.Info.Apodization;
                command.Parameters["@PhaseApodization"].Value = (short)spectra.Info.PhaseApodization;
                command.Parameters["@Temperature"].Value = spectra.Info.Temperature;
                command.Parameters["@Pressure"].Value = spectra.Info.Pressure;
                command.Parameters["@NumScans"].Value = spectra.Info.NumScans;
                command.Parameters["@Resolution"].Value = spectra.Info.Resolution;
                command.Parameters["@Gain"].Value = spectra.Info.Gain;
                command.Parameters["@PathLength"].Value = spectra.Info.PathLength;
                command.Parameters["@FirstPoint"].Value = spectra.Info.FirstPoint;
                command.Parameters["@LastPoint"].Value = spectra.Info.LastPoint;
                command.Parameters["@MaxFrequency"].Value = spectra.Info.MaxFrequency;
                command.Parameters["@MaxLocPoint"].Value = spectra.Info.MaxLocPoint;
                command.Parameters["@MinLocPoint"].Value = spectra.Info.MinLocPoint;
                command.Parameters["@NumDataPoints"].Value = spectra.Info.NumDataPoints;
                command.Parameters["@NumDataPhase"].Value = spectra.Info.NumDataPhase;
                command.Parameters["@Step"].Value = spectra.Info.Step;
                command.Parameters["@IgramType"].Value = (short)spectra.Info.IgramType;
                mySqlConnect.Open();
                command.ExecuteNonQuery();
                fileChosen = false;
                //Don't have to call connection close due tp using statment
                label1.Hide();
            }

ID は自動インクリメントなので、VALUES ステートメントに含める必要はありません。私のプロセスの次のステップは、データ ポイント テーブルに追加することです。コマンド オブジェクトを再利用し、コマンド テキストを再割り当てする予定です。私の質問は、このデータ ポイントの配列を取得して、両方のテーブルで ID を同時に維持しながら、他のテーブルに割り当てる方法です。私が推測しているのは、関係は基本的に「主キーと外部キーが一致する場合、それらは関連している」ということです。

4

1 に答える 1