我有以下代码,事实证明,当尝试使用OleDbDataReader
查找最后一个数据时,它不会恢复属于该行的ID,而它会返回0。
如果它是上一个到最后一个,并且此上一个,则 id完美地返回给我。例如:
id
表Usuario的引用。
| Id | ddi | Name |
|----|-------|--------|
| 1 | 77652 | Sam |
| 2 | 76382 | Marts |
| 3 | 47538 | Irlon |
| 4 | 83757 | Mayron |
| 5 | 88657 | Peynr |
-
Txddi.Text = 88657
-
Private Function Datos()
cnn.Close()
Dim id As Integer
Dim datas As String
Dim cmd As New OleDbCommand("SELECT Id, ddi, Name FROM Usuario WHERE ddi=" & Txddi.Text, cnn)
cnn.Open()
Dim search As OleDbDataReader = cmd.ExecuteReader
If search.Read Then
id = search("Id") '------------> doesn't return the last id
LblName.Text = search("Name")
LblExist.Text = "Exist"
Return id
Else
Return id
LblExist.Text = "New"
End If
cnn.Close()
End Function
返回-> 0
答案 0 :(得分:0)
我已经能够解决它,并添加了 LIKE
,该功能用于搜索具有相同功能的数据。
Dim cmd As New OleDbCommand("SELECT Id, ddi, Name FROM Usuario WHERE ddi LIKE '%" + Txddi.Text + "%'", cnn)
答案 1 :(得分:0)
很高兴您的代码能够正常工作,但我想指出一些对代码的改进。
函数必须具有数据类型。
将数据库对象保留在本地,以便确保它们已关闭并已处置。使用...结束使用块会为您完成此操作,即使出现错误也是如此。
您可以将连接字符串直接传递给连接的构造函数。连接是宝贵的资源。直到最后一刻才打开,并尽快关闭。在您的代码中,连接永远不会关闭,因为一旦遇到代码Return,它就会将执行返回给调用代码。
始终在sql语句中使用Parameters以避免sql注入并确保正确的数据类型。访问不关心参数的名称。重要的是,参数在sql语句中出现的顺序必须与将参数添加到参数集合的顺序匹配。您将需要检查数据库中ddi的实际数据类型,并相应地调整OleDbType。如有必要,还要更正文本框值的转换。
在Using块内尽可能少地做。我已经将这些值分配给了块外的用户界面,最后返回了ID。
$arr = Array(
42 => 10,
55 => 20,
56 => 10,
57 => 4,
58 => 5,
59 => 240
);
// Can we do all in one subarray?
if(array_sum($arr) >= 250){
//No
$sum = 0;
$index = 0;
$result[$index] =[];
//Loop the array and keep the sum in memory
foreach($arr as $key => $val){
if($sum + $val < 250){
//Less than 250, just keep adding the values
$result[$index]['values'][] = $val;
$result[$index]['elements'][] = $key;
$sum += $val;
}else{
// More than 250, create a new subarray and reset sum
$sum = $val;
$index++;
$result[$index] = ['values' => [$val], 'elements' => [$key]];
}
}
}else{
//Yes, group the values and keys
$result = [['values' => array_values($arr), 'elements' => array_keys($arr)]];
}
var_dump($result);