当DataColumn是AllowDBNull并且默认值为“0”时,将插入什么值?

时间:2013-01-21 06:20:46

标签: c# sql-server-2008 dataset sqldataadapter

在将记录插入数据库时​​,我遇到了数据集问题。我有一个表地址,其中 phno(AllowNulls = False,Defaultvalue ='0')< / em> mbno(AllowNulls = True,Defaultvalue ='0') 。当我没有提供任何输入时,通过数据集将记录插入数据库在两列中,phno采用默认值('0'),mbno采用“Null”。我认为两者都必须在没有输入时采用默认值。

我不知道为什么会这样。我已经编写了这样的代码

    SqlConnection con = new SqlConnection(connStr);
    DataSet ds = new DataSet();
    DataRow dr;
    SqlCommand cmd = new SqlCommand("select * from address",con);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    SqlCommandBuilder cmdBuilder;
    da.FillSchema (ds,SchemaType.Source );
    da.Fill(ds, "address");

    dr = ds.Tables["address"].NewRow();
    dr["sname"] = "tomy";
    dr["fname"] = "peter";

    ds.Tables["address"].Rows.Add(dr);

    cmdBuilder = new SqlCommandBuilder(da);
    da.Update(ds, "address");

2 个答案:

答案 0 :(得分:2)

在此msdn reference page的备注部分中,将解释在哪些情况下将插入什么值。
由于DataSet上的AllowNulls = true,它可能会向数据库提交null,这将使数据库插入null。 如果要插入默认值,请删除AllowNulls或从insert语句中显式删除该参数(在这种情况下,您必须编写自己的InsertCommand)。

顺便说一下,你想通过AllowNull和Default的组合得到什么?

答案 1 :(得分:1)

好吧,如果您在列中允许Null,那么它将使用Null更新,而不是默认值。因此,要么将列更改为Allow nulls = false,要么从代码传递默认值。