将空值插入SQL Server数据库

时间:2013-07-06 06:48:23

标签: c# asp.net sql-server

我有这段代码

public void insertAssignment(long mediaEvent_ID, long mediaBranch_ID,
int? isPremiere, int? isNew, int? isLastChance, 
int? isPrevShown, int season_ID, int? audio_ID, 
int? video_ID, DateTime startdate)
{
    query = "insert into Assignment Values(" + mediaEvent_ID+ "," 
    + mediaBranch_ID + "," + isPremiere + "," + isNew + "," 
    + isLastChance + "," + isPrevShown
    + "," + season_ID + "," + audio_ID + "," + video_ID + ",'" +  
    startdate.ToString("MM/dd/yyyy") + ")";   }

插入时有问题,如果任何属性为空,如isPremiere=null问题 是insert {values(mediaEvent,mediaBranch,(is empty not contains a values ),......)}

如何解决此问题?

2 个答案:

答案 0 :(得分:8)

如果您正在使用文字编写tsql,则需要检测空方案并附加“null”而不是值,因此SQL看起来像

1,2,null,4,5

如果你明白我的意思。但是,这是一个不好的方法 - 你的SQL现在真的很危险。你应该参数化 - 这解决了一系列问题:

  • sql注入(您的代码现在是安全风险)
  • 格式化(日期等)
  • null values
  • 查询计划重用(或缺少它)

例如:

query = "insert into Assignment Values(@eventId, @branchId, @isPremiere, @isNew, ...)"

在其中为每个占位符添加带有值的参数。请注意,由于ado.net需要使用DBNull表示空值:

cmd.Parameters.AddWithValue("foo",
    foo == null ? (object)DBNull.Value : (object)foo);

(对于每个参数)

请注意,orms和micro-orms将有助于简化这一过程。例如,使用小巧玲珑:

DateTime foo = ...
int? bar = ...
connection.Execute(
     @"insert ... values (@foo, @bar)",
    new { foo, bar });

答案 1 :(得分:0)

我已经解决了我的问题

string sql= insert into Table(limit) values("+TBkapidaMinLimit.Text==""?"null":TBkapidaMinLimit.Text)+")"