c# - 添加到数据库 : parameter not supplied but it's not required in SQL column

标签 c# sql

所以,我可以成功地向数据库添加一个新波段,但有时我并不需要所有参数。在我的数据库中“图片”和“描述”允许有“空”值,那么为什么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/

相关文章:

c# - Linq 和延迟评估

sql - 使用 ServiceStack.OrmLite 执行原始 SQL

mysql - 如果值为空或不为两个新值,则在 SQL 中赋值

sql - 在 MS Access 中格式化

c# - 如何从 Azure 总线服务检索所有主题?

C# 打开虚拟串口抛出 ArgumentException

c# - 将 Button 绑定(bind)到 ItemsControl 容器中的 RelayCommand

c# - .NET Custom UserControl 的内容在调整父级大小时消失

sql - ORA删除/截断

mysql - 表存在于显示表中,但当我尝试从中选择时不存在