繁体   English   中英

C#使用DBNull.value更新数据库条目似乎出错

[英]C# update a db entry with DBNull.value seems to error

好吧,也许我正在解决这个错误。 我们将会看到。

因此,我正在检查一些数据。 该数据将为Int32类型。 或多或少,如果该项目不是我的标志之一,我想将其设置为DBNull.value

我想确定的是该列是可为空的,因此,如果我不输入任何内容,则应将其设置为null。

这是我的程序逻辑:

int content = 5;  //set for sake of program;
int test;
if( content == 5){
  test = content;
}else{
  //i want test to be labeled as DBNULL.
  //didnt know if i could redefine here to be like:
  //      free(test); DBNull test = new DBNull;
}
//my companys db command
CommandFactory cmd = new CommandFactory();
cmd.commandText = "insert into TABLE ( value ) values ( @a )";
cmd.addInputParameters("@a", test, DBType.Int32);
...

在这种情况下,如何将它发送给dbnull? 像:

if(test != -1){
    cmd.addInputParameters("@a", test, DBType.Int32);
}
//no param would be entered for @a, maybe forcing it to be null?

在表的定义中,值是可为空的,因此您无需担心。

虽然发布了正确的答案,但最终我却没有使用这个答案,因为我的同事不希望我对??做“魔术”,所以他们让我这样做:

int? temp;
if(temp.HasValue){
    cmd.addInputParameters("@a", temp, DBType.Int32);
}else{
    cmd.addInputParameters("@a", DBNull.Value, DBType.Int32);
}

怎么样:

int? test = content
...
cmd.addInputParameters("@a", (object)test ?? DbNull.Value, DBType.Int32);

您的问题确实很难理解,但我想您要说的是您想要一个可能为空的整数。 只需将test声明为可为null的int而不是常规int。 所以:

int? test = null;

尝试使用此代码在db中插入可为空的整数。 我已经将int设置为可为空的数据类型,为此,必须强制db中的“测试”列为可为空。

        int content = 5;  //set for sake of program;
        int? test = null;
        if (content == 5)
        {
            test = content;
        }

        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "insert into TABLE (columnNameforTest) values ( @test)";
        cmd.Parameters.AddWithValue("@test", test);
        SqlConnection con = new SqlConnection("yourconnectionstring");
        int i = cmd.ExecuteNonQuery();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM