0
 Dim con1 As OleDb.OleDbConnection
            Dim cmd As OleDb.OleDbCommand
            Dim query As String


            Dim rs As OleDb.OleDbDataReader
            con1 = New OleDb.OleDbConnection("Provider=MSDAORA.1;Data Source=localhost;Persist Security Info=True;Password=sys;User ID=nitishok")
            con1.Open()


            query = "select * from HOLDERSDB where DOB like '" + DateTimePicker1.Value + "' "
            cmd = New OleDb.OleDbCommand(query, con1)
            cmd.CommandType = CommandType.Text
            rs = cmd.ExecuteReader

            Dim da As New OleDb.OleDbDataAdapter(query, con1)

            Dim ds As New DataSet()
            da.Fill(ds, "HOLDERSDB")
            DataGridView1.DataSource = ds.Tables(0)

            con1.Close()
    enter code here

我想要 HOLDERS 表中 DOB 为 datetimepicker1 的行 我发布的代码不返回任何结果。

请帮忙。

4

4 回答 4

1

假设 DOB 是一个 DATE 字段(希望它是!)然后使用 TO_DATE 并且不要尝试比较 date=string,否则如果不是今天,那么您的代码将在某天失败。

"select * from HOLDERSDB where dob = to_date(" + DateTimePicker1.Value + ", 'dd-mon-yyyy')

请参阅此处格式化 DateTimePicker 的返回

http://msdn.microsoft.com/en-us/library/system.windows.forms.datetimepicker.customformat.aspx

确保以与 TO_DATE 函数中的第二个参数相同的方式格式化它(不必像我所说的那样是 dd-mon-yyyy,Oracle 支持多种格式)。

此外,出于性能/安全原因,您应该使用绑定变量而不是将字符串粘贴到 SQL 中。

于 2012-11-01T13:08:34.137 回答
0

您需要采取的步骤来查明问题:

  • 检查 的值query,是否正确?
  • 手动对数据库运行查询,是否返回结果?
  • 检查ds对象是否有数据使用ds.Tables[0].Rows.Count,大于 0?
于 2012-11-01T12:53:09.113 回答
0

将 OleDbParameter 添加到cmd.Parameters而不是在查询中连接。这将减少黑客攻击的可能性,并帮助我插入正确类型的值。

另外,我不明白为什么您需要类似的声明。也许您应该使用普通的 = 运算符,尤其是当 DOB 是日期时。

于 2012-11-01T16:44:46.080 回答
0

一旦我使用:

Public Function SQLDate(p1 As Date) As String
    Return String.Format("{0}{1}{2}", p1.Year, p1.Month.ToString.PadLeft(2, "0"c), p1.Day.ToString.PadLeft(2, "0"c))
End Function

所以:

Debug.Print(SQLDate(DateTimePicker1.Value)) =====> 20121101

在 SQL 查询中使用:

String.Format("... WHERE DOB = '{0}'", SQLDate(DateTimePicker1.Value))
于 2012-11-01T15:45:16.963 回答