2014-03-31 21 views
0

我試圖運行從鐵蟒蛇一個存儲過程,但有麻煩的設置將CommandType:IronPython SqlClient CommandType?

import clr 
clr.AddReference('System') 
clr.AddReference('System.IO') 
clr.AddReference('System.Data') 
from System import Console as cns 
from System.Data import SqlClient as sql 

我測試代碼,SQL連接和運行一個簡單的選擇查詢,以確認我可以得到一個工作方面,所以這就是傳入該功能爲「」騙子'

def get_cols_for(con, table): 
    cols = {} 
    cmd = sql.SqlCommand("sp_columns", con) 
    cmd.Parameters.Add(sql.SqlParameter("@table_name", "EQUIPMENT")) 
    sp = sql.SqlCommand.CommandType.StoredProcedure 
    rdr = cmd.ExecuteReader() 
    while rdr.Read(): 
     cols[str(rdr[3])]=(str(rdr[5]),int(rdr[7])) # ColumnName @ 3, TypeName @ 5 
    rdr.Close() 
    return cols 

智能感知暗示的StoredProcedure爲自動一的CommandType成員,所以我敢肯定,它實際上是有,但是當我運行這段代碼,我得到以下投訴:

{ 「 'getset_descriptor' 對象有沒有屬性 '的StoredProcedure'」}

當我執行行SP = sql.SqlCommand.CommandType.StoredProcedure

一個人如何去設置的CommandType?

順便說一句,如果我只是用這種形式,它的工作原理確定:

cmd = sql.SqlCommand("exec sp_columns @table_name='%s'" % table, con) 

回答

1

看來它不進口。 如果通過

from System.Data import CommandType as cmdType 

導入它的工作原理:

>>>cmdType.__doc__ 

回報:

指定命令字符串的方式解釋。枚舉 的CommandType,值:StoredProcedure的(4),TableDirect(512),文本(1)

也請注意,您,根據msdn,應該也是CommandText屬性設置爲存儲過程的名稱。

+0

是的,謝謝tobsen,我曾嘗試從System.Data.SqlCommand中導入CommandType,因爲它出現在該庫中,但它確實以您導入它的方式工作。順便說一句,CommandText由SqlCommand構造函數設置,所以不需要單獨設置它。我可以說cmd = sql.SqlCommand(con),然後將其設置爲下一步,例如cmd.CommandText =「sp_columns」。 –