我有这段代码
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 ),......)}
如何解决此问题?
答案 0 :(得分:8)
如果您正在使用文字编写tsql,则需要检测空方案并附加“null”而不是值,因此SQL看起来像
1,2,null,4,5
如果你明白我的意思。但是,这是一个不好的方法 - 你的SQL现在真的很危险。你应该参数化 - 这解决了一系列问题:
例如:
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)+")"