2014-02-06 69 views
1

我正在構建一個sqlwrapper來處理MSsql和Sqlite,到目前爲止我沒有使用通用的dbconnection,dataset和dataadapter的問題,但是使用dbcommand參數.add是唯一的選項。我想使用像sqlcommand和sqlitecommand parameter.addwithvalue,但我不確定如何實現它。缺少來自dbcommand.parameters的addwithval

例如這裏是我的sqlitefactory:

public class SqlLiteFactory : SqlFactory 
{ 
    public override DbConnection CreateConnection() 
    { 
     return new SQLiteConnection(ConfigurationManager.ConnectionStrings["ClientDBConnectionString"].ConnectionString); 
     //return new SQLiteConnection("Data Source=Resources\\qaqc.sqlite;Version=3"); 
    } 

    public override DataAdapter CreateAdapter(string command, DbConnection connection) 
    { 
     return new SQLiteDataAdapter(command, connection as SQLiteConnection); 
    } 

    public override DbCommand CreateCommand() 
    { 
     return new SQLiteCommand(); 
    } 
} 

這是我實現:

DbConnection c = SqlHandler.Instance.CreateConnection(); 

DbCommand cmd = SqlHandler.Instance.CreateCommand(); 

cmd.Connection = c; 
cmd.CommandText = "SELECT column FROM table WHERE syncstatus = 0 and UserName = @user GROUP BY column;"; 
cmd.Parameters.Add("@user"); 
cmd.Parameters["@user"].Value = SystemInformation.UserName; 
DbDataReader dr = cmd.ExecuteReader(); 

在更具體的SqlCommand和sqlitecommand有一個方法.addwithvalue()這就是我d喜歡在父類dbcommand類中使用。

+0

添加一些代碼示例。 – Herrozerro

+0

您正在使用DbCommand,您是否嘗試過使用SqlCommand? – Miller

+0

以及我正在使用dbcommand,因爲我需要將它傳遞給sqlcommand或sqlite命令,我不確定是否將sqlcommand傳遞給sqlitecommand會起作用。 – Herrozerro

回答

9

與和擴展方法

static class MyExtensions 
    { 
     public static void AddParameterWithValue(this DbCommand command, string parameterName, object parameterValue) 
     { 
      var parameter = command.CreateParameter(); 
      parameter.ParameterName = parameterName; 
      parameter.Value = parameterValue; 
      command.Parameters.Add(parameter); 
     } 
    } 

解決它從http://social.msdn.microsoft.com/Forums/en-US/d56a4710-3fd1-4039-a0d9-c4c6bd1cd22e/dbcommand-parameters-collection-missing-addwithvalue-method

+0

夠簡單:) –

+0

不錯!爲了使它更通用,可以用接口IDbCommand替換DbCommand。 – Tom