我正在使用多种形式,到目前为止,我已经发现实际上没有办法获取空文本字段并将其作为null插入数据库。
例如,如果文本字段为空,则为:
<asp:TextBox id="tb0" runat="server"></asp:TextBox>
<asp:TextBox id="tb1" runat="server"></asp:TextBox>
<asp:TextBox id="tb2" runat="server"></asp:TextBox>
但填写了它周围的文本框
查询有什么办法可以在运行时看起来像这样:
INSERT INTO table_name VALUES ('test0', null, 'test2')
而不是必须循环并将值更改为空白?当它们是varchar字段时,空格很好,但是对于整数/日期来说这是非常烦人的
以下是我的一个插页
的一部分"INSERT INTO Customer VALUES(" + custID + " , @mastName, @custName, @addrLn1, @addrLn2, @cCity, @cState, @cZip, @cZip4, @cCountry, @cusSince, @renewalDate)"
BTW custID不是参数,因为它是一个浮点数,当我将其设置为参数时,该值变得混乱(例如105.05将变为105.0498 ..)
答案 0 :(得分:2)
你可以使用这样一个简单的方法:
object ToDBValue(string str)
{
return string.IsNullOrEmpty(str) ? DBNull.Value : (object)str;
}
然后你可以建立你的参数:
command.Parameters.AddWithValue("@VAL1", ToDBValue(tb0.Text));
command.Parameters.AddWithValue("@VAL2", ToDBValue(tb1.Text));
command.Parameters.AddWithValue("@VAL3", ToDBValue(tb2.Text));
然后将您的查询更改为:
INSERT INTO table_name VALUES (@VAL1, @VAL2, @VAL3)
答案 1 :(得分:1)
使用DBNull.Value,它会为行中的特定值提供Null。因此,如果您检查文本框是否为空。只需使用一些东西 !string.IsNullOrWhitespace(tb0.Text)? tb0.Text:DBNull.Value
答案 2 :(得分:0)
如果使用带参数的存储过程,则可以创建参数值DBNull.Value
答案 3 :(得分:0)
您可以更改存储过程吗?如果是这样,您可以将参数设为可选,默认为NULL
,而不传递值为IsNullOrEmpty
。