string[] Tags = new string[] { "ruby","rails","scruffy","rubyonrails" };string cmdText = "SELECT * FROM Tags WHERE name IN ({0})";string[] paramnames = Tags.Select( (s,i) => "@tag" + i.ToString()).ToArray();string inClause = string.Join(",",paramnames);using (sqlCommand cmd = new sqlCommand(string.Format(cmdText,inClause))) { for(int i = 0; i < paramnames.Length; i++) { cmd.Parameters.AdDWithValue(paramnames[i],Tags[i]); }}
这给了这个:
cmd.CommandText = "SELECT * FROM Tags WHERE name IN (@tag0,@tag1,@tag2,@tag3)"cmd.Parameters["@tag0"] = "ruby"cmd.Parameters["@tag1"] = "rails"cmd.Parameters["@tag2"] = "scruffy"cmd.Parameters["@tag3"] = "rubyonrails"
这非常有效,但我也想要以下功能.如果用户决定不输入任何值(在此示例中,如果Tags数组为空),则我希望返回所有结果.实际上只是一个SELECT * FROM标签.
解决方法 怎么样的string[] Tags = new string[] { "ruby","rubyonrails" };string cmdText = "SELECT * FROM Tags {0}";string[] paramnames = Tags.Select( (s,i) => "@tag" + i.ToString() ).ToArray();string cmDWhere = paramnames.Length > 0 ? String.Format("WHERE name IN ({0})",string.Join(",paramnames)) : "";using (sqlCommand cmd = new sqlCommand(string.Format(cmdText,cmDWhere))){ for (int i = 0; i < paramnames.Length; i++) { cmd.Parameters.AdDWithValue(paramnames[i],Tags[i]); }}
因此,如果没有参数,则最后不添加where子句.
总结以上是内存溢出为你收集整理的c# – 使用未知数量的参数查询数据库全部内容,希望文章能够帮你解决c# – 使用未知数量的参数查询数据库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)