Linq ExecuteCommand不理解空值

Sam*_*ijo 22 c# null linq-to-sql

使用linq将空值传递给ExecuteCommand()方法时遇到问题.我的代码类似于下面的代码:

    public void InsertCostumer(string name, int age, string address)
    {
        List<object> myList = new List<object>();

        myList.Add(name);
        myList.Add(age);
        myList.Add(address);

        StringBuilder queryInsert = new StringBuilder();
        queryInsert.Append("insert into Customers(name, address) values ({0}, {1}, {2})");

        this.myDataContext.ExecuteCommand(queryInsert.ToString(), myList.ToArray());
    }
Run Code Online (Sandbox Code Playgroud)

但是,当参数为null(例如地址)时,我收到以下错误:"查询参数不能是'System.Object'类型."

如果没有参数为null,则不会发生错误.我知道我的例子中的设计有点差,我只是创建了一个简化的例子来关注问题.有什么建议?

Kev*_*dge 19

这是一个已知的错误,Microsoft不打算修复它...

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=305114&wa=wsignin1.0

解决方法是:

  1. 进入ADO.NET并直接执行SQL命令
  2. 格式化您自己执行的字符串并使用空对象数组调用ExecuteCommand(new object [0])

第二个不是一个好主意,因为它打开你的SQL注入攻击,但它是一个快速的黑客.

  • 7年后.什么都没有改变.Arghhhh微软! (4认同)
  • 这很奇怪,因为[MSDN明确表示](https://msdn.microsoft.com/zh-cn/library/system.data.linq.datacontext.executecommand(v = vs.110).aspx)它处理空值 (2认同)
  • 9年后,仍然什么都没有!:/ (2认同)