所以,我可以成功地向数据库添加一个新波段,但有时我并不需要所有参数。在我的数据库中“图片”和“描述”允许有“空”值,那么为什么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);
}
}
最佳答案
在 ADO.NET 中,如果参数的值为 null
,则不会发送。如果要表示数据库 null
,则需要将 .NET null
替换为 DBNull.Value
。是的,这很糟糕。
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);
或者,使用“dapper”之类的东西来减轻你的痛苦:
conn.Execute(@"INSERT INTO Band(Naam, Picture, Description, Facebook, Twitter)
VALUES(@Name,@Picture,@Description,@Facebook,@Twitter)", band);
这将 a:极大地简化您的数据访问代码,并且 b:自动正确处理这些晦涩难懂的规则。
关于c# - 添加到数据库 : parameter not supplied but it's not required in SQL column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20619814/