0

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

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

我要确定的是该列可以为空,所以如果我没有在其中输入任何内容,它将被设置为空。

这是我的程序逻辑:

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

3 回答 3

4

怎么样:

int? test = content
...
cmd.addInputParameters("@a", (object)test ?? DbNull.Value, DBType.Int32);
于 2012-08-24T15:07:05.067 回答
0

你的问题真的很难理解,但我认为你的意思是你想要一个可能的可空整数。只需将 test 声明为可为空的 int 而不是常规的 int。所以:

int? test = null;

于 2012-08-24T15:06:31.763 回答
0

尝试使用此代码在 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();
于 2012-08-24T17:41:30.507 回答