我正在处理我的Windows窗体应用程序。在这个winform中,我有一个 checkListBox ,它绑定了我的sql db中的数据。我试图将checkListBox的checkedItem匹配到我的sql表列的文本,该文本存储为nvarchar
数据类型。我运行调试模式,发现它在程序执行时跳过整个while循环。我不知道为什么,因为有价值的名称items
确实显示了检查checkListBox中的哪个复选框
这是我的代码。
foreach(var items in checkListBox1.CheckedItems){
string query = "select * from my_table WHERE employeeName = '"+items+"'"
SqlCommand myCommand = new SqlCommand(query, myConn);
SqlDataReader dr = myCommand.ExecuteReader();
while(dr.Read()){
//read the column
}
}
这是屏幕截图。我试图在列中获取chineseName(不要担心它是什么大声笑)
答案 0 :(得分:1)
您的代码中存在多个问题。您不需要在ForEach循环中编写查询。如果您希望从checklistbox中获取多个值,则equalto = operator不是您的朋友,则需要使用IN运算符。现在查看下面的例子。
<table class="table">
<colgroup>
<col width="200px">
<col width="100px">
<col width="100px">
<col width="100px">
</colgroup>
<tr class="table-row">
<td class="table-cell">
<div class="table-cell-table">
<div class="table-cell-text">line 0 cell 1 text</div>
<div class="table-cell-icon"></div>
</div>
</td>
<td class="table-cell">line 0 cell 2</td>
<td class="table-cell">line 0 cell 3</td>
<td class="table-cell">line 0 cell 4</td>
</tr>
<tr class="table-row">
<td class="table-cell">
<div class="table-cell-table">
<div class="table-cell-text">line 1 cell 1 long text</div>
<div class="table-cell-icon"></div>
</div>
</td>
<td class="table-cell">line 1 cell 2</td>
<td class="table-cell">line 1 cell 3</td>
<td class="table-cell">line 1 cell 4</td>
</tr>
<tr class="table-row">
<td class="table-cell">
<div class="table-cell-table">
<div class="table-cell-text">line 2 cell 1 very very long text</div>
<div class="table-cell-icon"></div>
</div>
</td>
<td class="table-cell">line 2 cell 2</td>
<td class="table-cell">line 2 cell 3</td>
<td class="table-cell">line 2 cell 4</td>
</tr>
</table>
答案 1 :(得分:0)
由于数据库中的数据类型是nvarchar,请通过修改代码中的以下语句来尝试它
string query = "select * from my_table WHERE employeeName = '"+items+"'"
到
string query = "select * from my_table WHERE employeeName = N'"+items.ToString()+"'"
前缀'N'用于从已检查项目
进行比较的值