2011-07-25 83 views
10

我對SqlCommand有以下參數。我如何使它既存入存儲過程的參數值,又存入存儲過程的參數值。SqlCommand的輸入輸出參數

SqlCommand mySqlCommand = new SqlCommand("aspInsertZipCode", mySqlConnection); 
mySqlCommand.CommandType = CommandType.StoredProcedure; 
mySqlCommand.Parameters.Add("@DataRows", dataStringToProcess.ToString()); 

回答

14
var pInOut = mySqlCommand.Parameters.Add("@DataRows", dataStringToProcess.ToString()); 
pInOut.Direction = ParameterDirection.InputOutput; 

然後你執行命令後,讀取輸出值:

// assumes that the parameter is a string and that it could possibly be null 
string value = Convert.IsDBNull(pInOut.Value) ? null : (string)pInOut.Value; 
+0

public SqlParameter Add(string parameterName,SqlDbType sqlDbType,int size)。基於此,我應該如何定義尺寸的大小?在存儲過程中,它是VARCHAR(MAX) – Lijo

+2

@Lijo:我認爲[MSDN上的示例使用-1](http://msdn.microsoft.com/zh-cn/library/bb399384.aspx)用於'VARCHAR (MAX)'等。所以它會像'var pInOut = mySqlCommand.Parameters.Add(「@ DataRows」,SqlDbType.VarChar,-1); pInOut.Direction = ParameterDirection.InputOutput; pInOut.Value = dataStringToProcess.ToString();' – LukeH

5

SqlParameterDirection枚舉。設置此值。

然後使用需要SqlParameterSqlCommand.Parameters.Add

參數方向:

http://msdn.microsoft.com/en-us/library/system.data.parameterdirection.aspx

然後拉out的值具有稱爲ExecuteNonQuery(例如),由來自參數獲取Value出命令集合的後:

myCommand.Parameters["@paramName"].Value

不記得了,但我認爲有一個字符串索引器。

另外,有這樣一個班輪:

myCommand.Parameters.AddWithValue("@paramName", value).Direction = ParameterDirection.InputOutput;

+0

我應該使用mySqlCommand.Parameters [0]?在將其添加到參數集合本身時定義方向的任何其他方式? – Lijo

+0

@Lijo我已經添加了一個可以使用的單行命令的例子。此外,我認爲Add不推薦使用AddWithValue。 –

+0

[AddWithValueis通常是一個壞主意](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/),我真的沒有推薦它,特別是如果你正在使用'string'。 'AddWithValue'將創建一個'nvarchar'參數,如果你正在使用直接查詢,並且將你的'nvarchar'參數與一個'varchar'列進行比較,它將導致列從'varchar'轉換爲'nvarchar',這會導致該列上的任何索引無法運行。 –

0
SqlParameter DataRows = new SqlParameter("@DataRows", SqlDbType.Text) 
{ Value = dataStringToProcess.ToString(), Direction = ParameterDirection.InputOutput}; 
mySqlCommand.Parameters.Add(DataRows); 
2

SQL命令的一個屬性參數是方向。您可能需要使用(去關閉的內存)

SqlCommand mySqlCommand = new SqlCommand("aspInsertZipCode", mySqlConnection); 
mySqlCommand.CommandType = CommandType.StoredProcedure; 
mySqlCommand.Parameters.Add("@DataRows", dataStringToProcess.ToString()); 
mySqlCommand.Parameters("@DataRows").Direction = ParameterDirection.InputOutput; 
+1

Typo on last line。參數不是一個方法,它是一個集合。因此,該塊應該是... 'SqlCommand mySqlCommand = new SqlCommand(「aspInsertZipCode」,mySqlConnection); mySqlCommand.CommandType = CommandType.StoredProcedure; mySqlCommand.Parameters.Add(「@ DataRows」,dataStringToProcess.ToString()); mySqlCommand.Parameters [「@ DataRows」]。Direction = ParameterDirection.InputOutput;' –