Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql DbCommand.Parameters中缺少AddWithValue_Sql_Ado.net - Fatal编程技术网

Sql DbCommand.Parameters中缺少AddWithValue

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

我正在构建一个sqlwrapper来处理MSsql和Sqlite,到目前为止,我在使用通用的dbconnection、dataset和dataadapter方面没有问题,但是使用dbcommand parameters.add是唯一的选项。我希望像sqlcommand和sqlitecommand一样使用parameter.addwithvalue,但我不确定如何实现它

例如,下面是我的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(),这是我希望在父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。