私は構成済みの要素リストを取得し、その値をデータベースに書き込む次のC#スクリプトを用意しました。C#Script - 特定のデータベースフィールドにのみ書き込むように変更する
using System;
using System.IO;
using System.Data.SqlClient;
public class Script
{
public static bool ExportData(DataExportArguments args)
{
try
{
var sqlStringTest = new SqlConnectionStringBuilder();
// SERVER/INSTANCE
sqlStringTest.DataSource = "SQL Server";
// DATABASE NAME
sqlStringTest.InitialCatalog = "Database";
sqlStringTest.IntegratedSecurity = false;
sqlStringTest.UserID = "user";
sqlStringTest.Password = "password";
using (var sqlConnection = new SqlConnection(sqlStringTest.ConnectionString))
{
sqlConnection.Open();
using (IExportReader dataReader = args.Data.GetTable()) //Get the main data table
{
while (dataReader.Read()) // Loop through Export data rows
{
using (var sqlCommand = new SqlCommand())
{
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = @"INSERT INTO [dbo].[Subjects] (
SourceId,
DirectSourceUrl,
Identifier,
Name,
Category)
VALUES (
@SourceId,
@DirectSourceUrl,
@Identifier,
@Name,
@Category)";
sqlCommand.Parameters.AddWithValue("@SourceId", dataReader.GetStringValue("SourceId"));
sqlCommand.Parameters.AddWithValue("@DirectSourceUrl", dataReader.GetStringValue("DirectSourceUrl"));
sqlCommand.Parameters.AddWithValue("@Identifier", dataReader.GetStringValue("Identifier"));
sqlCommand.Parameters.AddWithValue("@Name", dataReader.GetStringValue("Name"));
sqlCommand.Parameters.AddWithValue("@Category", dataReader.GetStringValue("Category"));
sqlCommand.ExecuteNonQuery();
}
}
}
}
}
catch (Exception exp)
{
args.WriteDebug(exp.ToString(), DebugMessageType.Error);
return false;
}
return true;
}
}
問題は、このスクリプトを添付する各設定で、フィールドは上記のいずれかの組み合わせである可能性があります。たとえば、1つの構成では、Identifier
フィールドとName
フィールドだけを使用し、別のフィールドでは5フィールドすべてを使用し、さらに別のフィールドでは3フィールドしか使用しないことがあります。したがって、スクリプトを実行する際にエラーが発生するのを避けるために、スクリプトから使用しないフィールドを手動で削除する必要があります。
このコードを変更して、使用されていないフィールドを手動で削除する必要はありません。それはIF
とELSE IF
のステートメントのいくつかのフォームと思われるだろうが、私はどのようにフィールドの可能な組み合わせすべてのリストの外で行われるだろうと思いますか?
私は特にコメントなどを'/ WINDOWS AUTHENTICATION'の後ろにDをつけてください:D(これはすべてコメントで行いました!) – Jamiec
' IExportReader'に慣れていませんが、 'HasField'などのメソッドがあります。フィールドは、特定のデータセットに存在しますか? – Jamiec
あなたがそれらをすべて使用しないときには、私はあなたが未使用のものを 'ヌル 'にしたいと思いますか?値を持たないパラメータに 'DBNull.Value'を代入するだけです。 – Crowcoder