使用vb.net中的OleDbDataReader访问获取最后一个ID

时间:2019-07-03 19:45:27

标签: vb.net ms-access

我有以下代码,事实证明,当尝试使用OleDbDataReader查找最后一个数据时,它不会恢复属于该行的ID,而它会返回0。

如果它是上一个到最后一个,并且此上一个,则 id完美地返回给我。例如:

 id
  • 1 --->返回
  • 2 --->返回
  • 3 --->返回
  • 4 --->返回
  • 5 --->没有回报

表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

2 个答案:

答案 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);