何年もの間これに出くわしたことがなく、解決策を検索しても見つかりませんでした。SQLではオーバーロードと呼ばれていると思います。基本的に、この SQL のパラメータに "" (空の文字列) がある場合、データベースに値を設定したくありません...
注: C# レベルではなく、SQL レベルで実行したいのです。
string Sql = "IF NOT EXISTS (SELECT * FROM tbl_FileSystemReferences) "
+ "INSERT INTO tbl_FileSystemReferences (UploadDir) VALUES (null) "
+ "UPDATE tbl_FileSystemReferences SET "
+ "UploadDir=@UploadDir, "
+ "ThumbnailDir=@ThumbnailDir, "
+ "ArchiveDir=@ArchiveDir, "
+ "RealDir=@RealDir, "
+ "FlashDir=@FlashDir, "
+ "AssociatedFilesDir=@AssociatedFilesDir, "
+ "EnableArchiving=@EnableArchiving, "
+ "AppWideDir=@AppWideDir, "
+ "FFmpegDir=@FFmpegDir, "
+ "InstallationDir=@InstallationDir ";
SqlCommand Command = new SqlCommand(Sql);
Command.Parameters.AddWithValue("@UploadDir", f.UploadDir);
Command.Parameters.AddWithValue("@ThumbnailDir", f.ThumbnailDir);
Command.Parameters.AddWithValue("@ArchiveDir", f.ArchiveDir);
Command.Parameters.AddWithValue("@RealDir", f.RealDir);
Command.Parameters.AddWithValue("@FlashDir", f.FlashDir);
Command.Parameters.AddWithValue("@AssociatedFilesDir", f.AssociatedFilesDir);
Command.Parameters.AddWithValue("@EnableArchiving", f.EnableArchiving);
Command.Parameters.AddWithValue("@AppWideDir", f.AppWideDir);
Command.Parameters.AddWithValue("@FFmpegDir", f.FFmpegDir);
Command.Parameters.AddWithValue("@InstallationDir", f.InstallationDir);
ExecuteNonQuery(Command);
ストアドプロシージャでこれを行う方法があったことは知っていますが、その方法を思い出せません(オーバーロードと呼ばれていると思います)。
乾杯、