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 我发布的代码不会返回任何结果。
Plz帮助。
答案 0 :(得分: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中。
答案 1 :(得分:0)
您需要采取的步骤来确定问题:
query
的值,是否正确?ds
检查ds.Tables[0].Rows.Count
对象是否包含数据,大于0?答案 2 :(得分: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))
答案 3 :(得分:0)
将OleDbParameter添加到cmd.Parameters ,而不是在查询中连接。这将减少黑客攻击的可能性,并将帮助我插入正确的价值类型。
另外,我不明白为什么你需要一个类似的声明。也许你应该使用normal =运算符,特别是如果DOB是日期。