Sql DbCommand.Parameters中缺少AddWithValue
我正在构建一个sqlwrapper来处理MSsql和Sqlite,到目前为止,我在使用通用的dbconnection、dataset和dataadapter方面没有问题,但是使用dbcommand parameters.add是唯一的选项。我希望像sqlcommand和sqlitecommand一样使用parameter.addwithvalue,但我不确定如何实现它 例如,下面是我的sqlitefactory:Sql DbCommand.Parameters中缺少AddWithValue,sql,ado.net,Sql,Ado.net,我正在构建一个sqlwrapper来处理MSsql和Sqlite,到目前为止,我在使用通用的dbconnection、dataset和dataadapter方面没有问题,但是使用dbcommand parameters.add是唯一的选项。我希望像sqlcommand和sqlitecommand一样使用parameter.addwithvalue,但我不确定如何实现它 例如,下面是我的sqlitefactory: public class SqlLiteFactory : SqlFactory
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(),这是我希望在父dbcommand类中使用的方法。使用和扩展方法解决了这个问题
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);
}
}
from添加了一些代码示例。您正在使用DbCommand,是否尝试过使用SqlCommand?我使用DbCommand是因为我需要将其传递给SqlCommand或sqlite命令,我不确定将SqlCommand传递给sqlite命令是否有效。您使用的是基类,您正在寻找在基类的派生类(sqlcommand或sqlite命令)上实现的方法。很好!为了使它更通用,可以用接口IDbCommand替换DbCommand。