0

很久没有遇到过这种情况,当我搜索解决方案时,我找不到。我认为它在 SQL 中称为重载。基本上,当我在这个 SQL 中的任何参数都有“”(一个空字符串)时,我不想在数据库中设置一个值......

注意:我想在 SQL 级别做而不是在 C# 级别做,因为那样马虎。

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

我知道我曾经有一种方法可以使用存储过程来做到这一点,我只是不记得是如何做到的(我认为它被称为重载)......

干杯,

4

2 回答 2

2

您可以创建存储过程而不是将命令作为文本传递吗?

这样,您可以将“UploadDir=@UploadDir”之类的每一行分解为自己的变量,并且仅当它不为空或非空字符串时才将其添加到命令中

于 2011-03-16T17:40:50.863 回答
0

一种方法是在存储过程上,您将在其中接收所有这些参数,然后在查询之前:

  • 你允许通过 null
  • 如果它们为空,则将每个参数转换为 null:

    选择@UploadDir = null 其中@UploadDir = ''

您将对所有参数执行此操作,然后在更新查询中:

IF NOT EXISTS (SELECT * FROM tbl_FileSystemReferences)
INSERT INTO tbl_FileSystemReferences (UploadDir) VALUES (null)
UPDATE tbl_FileSystemReferences SET
UploadDir=coalesce(@UploadDir, UploadDir),
ThumbnailDir=coalesce(@ThumbnailDir, ThumbnailDir),
ArchiveDir=coalesce(@ArchiveDir, ArchiveDir),
RealDir=coalesce(@RealDir, RealDir),
FlashDir=coalesce(@FlashDir, FlashDir),
AssociatedFilesDir=coalesce(@AssociatedFilesDir, AssociatedFilesDir),
EnableArchiving=coalesce(@EnableArchiving, EnableArchiving),
AppWideDir=coalesce(@AppWideDir, AppWideDir),
FFmpegDir=coalesce(@FFmpegDir, FFmpegDir),
InstallationDir=coalesce(@InstallationDir, InstallationDir)
于 2011-03-16T18:11:16.823 回答