首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sqlite SELECT parameterized语句中使用ICollection值

在sqlite SELECT parameterized语句中使用ICollection值
EN

Stack Overflow用户
提问于 2010-05-22 17:27:25
回答 2查看 693关注 0票数 0

我正在尝试从sqlite数据库中获取所有条目,这些条目与哈希表中的键具有相同的名称。

我的语句看起来像这样。

代码语言:javascript
复制
// the keys from the hashtable are names equivalent 
// to name entrys in the SomeTable Names Collumn
Hashtable names;

String query = "SELECT Id, Name FROM SomeTable WHERE Name LIKE (@Names)";
SQLiteCommand command = new SQLiteCommand(query, _databaseConnection);
command.Parameters.AddWithValue("@Names", names.Keys);
SQLiteDataReader reader = reader.ExecuteReader();

while(reader.Read())
{
     Console.WriteLine("Name: {0}, ID: {1}", reader[1].ToString(), reader[0].ToString());
}

我完全确定数据库中有类似的值,但我没有得到任何结果,读取器也不会执行。有没有可能添加一个ICollection作为参数值,所以我只需要启动阅读器一次?

EN

回答 2

Stack Overflow用户

发布于 2010-05-22 18:31:05

您不希望在select中有LIKE子句,而需要in子句。

例如,最终,您希望执行如下查询:

代码语言:javascript
复制
SELECT Id, Name FROM SomeTable WHERE Name IN ('case23', 'carson63000', 'fred')

不幸的是,将其作为参数添加似乎并不简单。

我发现了一个更老的问题,"Parameterizing a SQL IN clause?",它可能会提供一些想法。

票数 0
EN

Stack Overflow用户

发布于 2010-05-22 19:20:49

所以为了结束这一切。多亏了我从Carlson63000得到的链接,我得到了一些有用的东西。

代码语言:javascript
复制
// First i build two String[] based on my Hastable.Keys. 
// One which holds the values, one which creates parameter names.

Hashtable hashNames;
String[] names = new String[hashName.Keys.Count];
String[] nameTags = new String[hashName.Keys.Count];
int c = 0;

foreach (String k in hashName.Keys)
{
     names[c] = k;
     nameTags[c] = "@tag" + c.ToString();
     c++;
}

// after this i create my statement using the nameTags String[]

String statementValueTags = String.Join(",", nameTags);
String query = String.Format("SELECT Name, FROM SomeTable WHERE (Name IN ({0}))", statementValueTags);

// for adding the parameterized Statements i use a for loop 
// where i add the values from my String[]
SQLiteCommand command = new SQLiteCommand(query, _databaseConnection);
for (int i = 0; i < names.Length; i++)
{
     command.Parameters.AddWithValue(nameTags[i], names[i]);
}
SQLiteDataReader reader = command.ExecuteReader();

while(reader.Read())
{
     Console.WriteLine(reader[0]);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2887558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档