2011-08-18 18 views
3

初次登錄的用戶 - 希望這是正確的格式:創建動態SQL的DbParameter值

我想知道如果我可以創建SQL的DbParameter值,尤其在ParamaterName。

我當前的代碼是:

DbCommand dbCommand = SqlDb.GetStoredProcCommand(uspCommand); 
DbParameter ProcessedFileName = dbCommand.CreateParameter(); 
ProcessedFileName.DbType = DbType.String; 
ProcessedFileName.ParameterName = "@FileName"; 
ProcessedFileName.Value = pstrProcessedFileName; 
dbCommand.Parameters.Add(ProcessedFileName); 

我想補充:

ProcessedFileName.ParameterName = "@FileName1"; 
ProcessedFileName.ParameterName = "@FileName2"; 
ProcessedFileName.ParameterName = "@FileName3"; 
ProcessedFileName.ParameterName = "@FileName4"; 

@FileNames從數組來。

回答

4

像這樣的東西應該工作:

DbCommand dbCommand = SqlDb.GetStoredProcCommand(uspCommand); 

foreach(String param in MyParameters) 
{ 
    DbParameter ProcessedFileName = dbCommand.CreateParameter(); 
    ProcessedFileName.DbType = DbType.String; 
    ProcessedFileName.ParameterName = param; 
    ProcessedFileName.Value = pstrProcessedFileName; 
    dbCommand.Parameters.Add(ProcessedFileName); 
} 
+0

好的 - 那是一個快速的迴應。我以爲我會在等待答案的同時建立陣列。看起來像其他的方式。我會嘗試你的建議,看看它是如何工作的 - 謝謝。 – HaySeed

2

做到這一點最好的辦法是把它們放在字典,因爲你將需要價值也

Dictionary<string, string> params = new Dictionary<string,string>(); 

,只是將它們添加很多,只要你想

params.Add("@FileName1", "my_filename") 

etc ...

然後

foreach(var param in params) 
    dbCommand.Parameters.AddWithValue(param.Key, param.Value); 
+0

啊,好點,因爲我離開了那部分 - 謝謝 – HaySeed

0

安倍 - 感謝 - 你在正確的方向拉去。以下是我落得這樣做:

我foreach循環裏面,我打電話給我的方法:

foreach (DataRow row in GlobalClass.NAVdataTable.Rows) 
    { 
    GlobalClass.AddToDbCommand(ref dBCommand, row["FieldName"].ToString(), row["Value"].ToString()); 

    connection.Open(); 
    SqlDb.ExecuteNonQuery(dBCommand); 
    connection.Close(); 
    dBCommand.Parameters.Clear(); 
    } 

,然後我AddToDbCommand方法包括:

public static void AddToDbCommand(ref DbCommand dbCommand, string FieldName, string FieldValue) 
    { 
     string FieldNameParameter = "@" + FieldName; 
     DbParameter dbParameter = dbCommand.CreateParameter(); 
     dbParameter.ParameterName = FieldNameParameter; 
     dbParameter.Value = FieldValue; 
     dbCommand.Parameters.Add(dbParameter); 
    } 
0

重構的一個擴展DbCommand,也是fieldName不帶@,所以你需要傳遞@或:前綴,而fieldValue被設置爲對象類型(不僅是字符串)。

public static class DbCommandExtensions 
{ 
    public static void AddParam(this DbCommand dbCommand, string fieldName, object fieldValue) 
    { 
     string fieldNameParameter = fieldName; 

     DbParameter dbParameter = dbCommand.CreateParameter(); 
     dbParameter.ParameterName = fieldNameParameter; 
     dbParameter.Value = fieldValue; 
     dbCommand.Parameters.Add(dbParameter); 
    } 
}