2011-10-19 39 views
2

我正在使用pyODBC連接到SQL Server 2005 Express數據庫。我在SQLServer express中創建了一個存儲過程,該存儲過程需要2個字符串參數,例如stored_proc(inpu1,input2),這些參數的類型爲datetime。我已經使用管理工作室測試了存儲過程,它確實返回了合適的結果。但是,當我嘗試從Python(我使用Eclipse)調用存儲過程時,我得到的錯誤。使用PyODBC將參數傳遞給存儲過程

pyodbc.DataError: ('22018', '[22018] [Microsoft][SQL Native Client]Invalid character value for cast specification (0) (SQLExecDirectW)')2/9/2011 12:00:03 2/9/2011 12:20:03

我打電話的功能如下:

def GetAlarmFrequencyTime(tstart,tend): 

print tstart, tend 
arguments=(tstart,tend) 
local_cursor=conn.cursor() 
local_cursor.execute("{call dbo.GetAlarmEventHistoryFrequency_TimeRange(tstart,tend)}") 

resultset_rows=local_cursor.fetchall() 
print "There are" , len(resultset_rows), "records" 
for single_row in resultset_rows: 
    print "|" ,single_row[0], "|" ,single_row[1],"|" 

local_cursor.close() 

這是造成故障的線路是

local_cursor.execute("{call dbo.GetAlarmEventHistoryFrequency_TimeRange(tstart,tend)}") 

誰能幫助我明白,我怎麼可以傳遞多個參數一個使用pyODBC調用的存儲過程。 我是否需要轉換tstart,並且傾向於首先使用日期時間格式,如果是這樣的話?我已經修整strptime,但即使這不是成功了,雖然我可能會使用它錯了

+0

我已經打了一下,發現local_cursor.execute(」 叫dbo.GetAlarmEventHistoryFrequency_TimeRange(?,?) }「,[dt_start],[dt_end]) 基本上,語法似乎是」調用stored_proc(?),[ PARAMS。現在我認爲是這樣,但是當我運行時,我在Python.exe中得到了未處理的Win32異常。有沒有人使用python 2.7在windows上使用pyodBC進行實驗? – user595985

回答

4

我終於得到它,沒有崩潰

local_cursor.execute("{call dbo.GetAlarmEventHistoryFrequency_TimeRange(tstart,tend)}")

工作是錯誤的語法。它應該是

local_cursor.execute("{call dbo.GetAlarmEventHistoryFrequency_TimeRange(?,?)}",(tstart),(tend))

應特別注意對特殊符號{}和參數在(TSTART)傳遞的方式進行,(往往)local_cursor.execute(」 * { *調用dbo.GetAlarmEventHistoryFrequency_TimeRange * (?,?)} 「(TSTART),(往往)*

+0

感謝您的回答。按照上面的步驟,但我不斷收到錯誤:「error_message」:「不是在字符串格式化過程中轉換的所有參數」 – Muniu

相關問題