C#脚本 - 修改为仅写入某些数据库字段

时间:2017-05-11 15:55:19

标签: c#

我有以下C#脚本,它接受已配置的元素列表并将值写入数据库。

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;
    }
}

问题是,对于我附加此脚本的每个配置,字段可以是上述任意组合。例如,在一种配置中,我可能只使用IdentifierName字段,而在另一个,全部5个字段中,而在另一个配置中,可能只有3个字段。因此,我必须为每个单独的配置手动删除脚本中未使用的字段,以避免在运行脚本时出错。

如何修改此代码,以便我不必手动删除未使用的字段?它似乎是某种形式的IFELSE IF陈述,但我无法想到如何在列出每个可能的字段组合之外完成它?

1 个答案:

答案 0 :(得分:1)

假设您的IExportReader有某种方法可以确定字段是否存在,您可以执行与此类似的操作(假设方法HasField,并且所有字段都可以为空):

sqlCommand.Parameters.AddWithValue("@SourceId", 
     dataReader.HasField("SourceId") 
           ? dataReader.GetStringValue("SourceId") 
           : DBNull.Value);