所以,我可以成功地向数据库中添加一个新的波段,但有时我不需要所有的参数。在我的数据库中,“Picture”和“Description”被允许具有“null”值,那么为什么C#不断给我提供参数未提供的错误消息?
public static void AddBand(Band band){
try
{
String sql = "INSERT INTO Band(Naam, Picture, Description, Facebook, Twitter) VALUES(@p1,@p2,@p3,@p4,@p5)";
DbParameter p1 = Database.AddParameter("@p1", band.Name);
DbParameter p2 = Database.AddParameter("@p2", band.Picture);
DbParameter p3 = Database.AddParameter("@p3", band.Description);
DbParameter p4 = Database.AddParameter("@p4", band.Facebook);
DbParameter p5 = Database.AddParameter("@p5", band.Twitter);
Database.ModifyData(sql, p1, p2, p3, p4, p5);
MessageBox.Show("Band successfully added.");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
答案 0 :(得分:4)
在ADO.NET中,如果参数的值为null
,则 不会发送 。如果您要表示数据库null
,则需要将DBNull.Value
替换为null
。是的,很糟糕。
DbParameter p1 = Database.AddParameter("@p1", (object)band.Name ?? DBNull.Value);
DbParameter p2 = Database.AddParameter("@p2", (object)band.Picture ?? DBNull.Value);
DbParameter p3 = Database.AddParameter("@p3", (object)band.Description ?? DBNull.Value);
DbParameter p4 = Database.AddParameter("@p4", (object)band.Facebook ?? DBNull.Value);
DbParameter p5 = Database.AddParameter("@p5", (object)band.Twitter ?? DBNull.Value);
或者,使用像“小巧玲珑”之类的东西来拯救你的痛苦:
conn.Execute(@"INSERT INTO Band(Naam, Picture, Description, Facebook, Twitter)
VALUES(@Name,@Picture,@Description,@Facebook,@Twitter)", band);
将:a:大大简化数据访问代码,b:自动获取这些模糊的规则。
答案 1 :(得分:0)
您应该使用其全部参数执行sp并将DBNull.Value作为值传递给那些打算为null的人
答案 2 :(得分:0)
如果参数为null:
这是代码:
CREATE PROCEDURE <MyProcedure>
@p1 NVARCHAR(100) = NULL,
@p2 INT = NULL
...
AS
BEGIN
...
END
答案 3 :(得分:0)
如果查询指定了数据库参数,请始终使用查询提供数据库参数。如果它可以为空,请检查它并为该参数提供DBNull.Value。
public static void AddBand(Band band){
try
{
String sql = "INSERT INTO Band(Naam, Picture, Description, Facebook, Twitter) VALUES(@p1,@p2,@p3,@p4,@p5)";
DbParameter p1 = Database.AddParameter("@p1", band.Name);
DbParameter p2 = Database.AddParameter("@p2", band.Picture
?? DBNull.Value);
DbParameter p3 = Database.AddParameter("@p3", band.Description
?? DBNull.Value);
DbParameter p4 = Database.AddParameter("@p4", band.Facebook);
DbParameter p5 = Database.AddParameter("@p5", band.Twitter);
Database.ModifyData(sql, p1, p2, p3, p4, p5);
MessageBox.Show("Band successfully added.");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}