我有以下代码:
long[] conIds = GetIDs();
dc.ExecuteCommand("UPDATE Deliveries SET Invoiced = NULL WHERE ID IN {0}",conIds);
我希望它可以工作,但executecommand语句会抛出一个异常,说明
查询参数不能是int64 []类型。
为什么会这样?
答案 0 :(得分:1)
您将long数组传递到占位符,其中包含字符串。您需要将数组转换为带逗号分隔符的连接字符串。然后,将其传递给命令文本。
根据您使用GetIDs
方法的其他位置,您可以通过让该方法返回字符串数组来简化代码。然后,您可以在此处轻松使用String.Join
将该数组转换为所需的连接文本。
答案 1 :(得分:0)
你不能这样做。 SQL参数必须是单个值。
您可以通过将数组转换为逗号分隔值列表来完成此工作。
有关示例,请参阅here。
command.CommandText = command.CommandText.Replace(
"@conIDs",
string.Join(conIDs.Select(b => b.ToString()), ",")
);
通常,最好序列化SQL并使用表值参数来处理这类事情。有关说明,请参阅this question。
答案 2 :(得分:0)
我遇到了麻烦,我发现Linq非常讲究参数。我必须将SQL语句构建为字符串并将该字符串传递给.ExecuteCommand()以使其工作。没有错误,只是没有结果。混乱。
那说有没有人看过一个很好的方法来查看Linq传递给Sql Server的内容?
我使用过SQL分析器,但它有点模糊。