2011-03-16 130 views
0

有没有遇到过这种年龄,当我搜索我找不到解决方案。我认为它被称为SQL重载。基本上,当我有“”(一个空字符串)的SQL中的任何参数,我不想在数据库中设置一个值...我该如何解决这个常见的SQL问题

注意:我想要在SQL级别做它不做在C#级别,因为它的马虎这样。

string Sql = "IF NOT EXISTS (SELECT * FROM tbl_FileSystemReferences) " 
      + "INSERT INTO tbl_FileSystemReferences (UploadDir) VALUES (null) " 
      + "UPDATE tbl_FileSystemReferences SET " 
      + "[email protected], " 
      + "[email protected], " 
      + "[email protected], " 
      + "[email protected], " 
      + "[email protected], " 
      + "[email protected], " 
      + "[email protected], " 
      + "[email protected], " 
      + "[email protected], " 
      + "[email protected] "; 

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

我知道有一种方法我用存储过程来做到这一点我只是不能记得(我认为这就是所谓的超载)....

干杯,

回答

0

一个办法是在存储过程,在那里你会得到所有的参数,然后将查询之前或者:

  • 您允许通过空
  • 你转换每个参数为空,如果它们是空的:

    选择@UploadDir =空在那里@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) 
2

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

这样,你可以打破各像线“UploadDir = @ UploadDir,”到了自己的变量,只能将其添加到命令,如果它不是空或不是空字符串

+0

不是我们真正使用内联SQL与参数SQL是对我们来说太过于矫枉过正。我明白你的意思,尽管它很有用。 – Exitos 2011-04-05 08:32:49