2012-10-17 50 views
0

有沒有辦法在較少的行寫下面的代碼?這似乎有很多代碼來執行這樣一個簡單的查詢。沒有LINQ,因爲我正在使用VS2005。在VB或C#中的答案是可以接受的。更簡單的方法將參數化查詢發送到數據庫?

Using cmd As DbCommand = oDB.CreateCommand() 
    cmd.CommandText = "SELECT * FROM [Table1] WHERE [Date] BETWEEN @Date1 AND @Date2" 
    cmd.CommandTimeout = 30 
    cmd.CommandType = CommandType.Text 
    cmd.Connection = oDB 
    Dim param As DbParameter 
    param = cmd.CreateParameter() 
    param.Direction = ParameterDirection.Input 
    param.DbType = DbType.Date 
    param.ParameterName = "@Date1" 
    param.Value = Now().Date 
    cmd.Parameters.Add(param) 
    param = cmd.CreateParameter() 
    param.Direction = ParameterDirection.Input 
    param.DbType = DbType.Date 
    param.ParameterName = "@Date2" 
    param.Value = Now().Date.AddDays(intDaysAhead) 
    cmd.Parameters.Add(param) 
End Using 
Dim reader As DbDataReader = cmd.ExecuteReader() 

回答

2

這些可能是線路最少可以得到:

Using con = New SqlConnection("Connectionstring") 
    Using cmd = New SqlCommand("SELECT * FROM [Table1] WHERE [Date] BETWEEN @Date1 AND @Date2", con) 
     cmd.CommandTimeout = 30 
     cmd.Parameters.AddWithValue("@Date1", Date.Today) 
     cmd.Parameters.AddWithValue("@Date2", Date.Today.AddDays(intDaysAhead)) 
     con.Open() 
     Using reader = cmd.ExecuteReader() 

     End Using 
    End Using 
End Using 

(假設SqlClient但類似其他數據提供商)

+0

我沒有得到'AddWithValue'作爲'可用的方法DbCommand.Parameters'。只有「添加」。 – CJ7

+0

然後你不使用'SqlClient',因爲它是'SqlParameterCollection'的一個方法。你在使用什麼數據提供者?即使在.NET 2中也可以在'OledbParameterCollection'中使用:http://msdn.microsoft.com/zh-CN/library/system.data.oledb.oledbparametercollection.addwithvalue(v=vs.80).aspx –

+0

The代碼正在嘗試迎合'OleDBConnection'或'SQLConnection',因此使用'DbCommand'。 – CJ7