Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
C# 传递参数以从c访问查询#_C#_Ms Access - Fatal编程技术网

C# 传递参数以从c访问查询#

C# 传递参数以从c访问查询#,c#,ms-access,C#,Ms Access,我设计了一个访问查询,如下所示: SELECT Replace(names,'lion','kiss') AS Expr1 FROM table1; UPDATE [t] SET [a] = ? WHERE [a] = ? 这两个值是lion和kiss,它们是临时的,现在我希望它们是两个变量,这样我就可以从c#向它传递值 如何从c#调用此查询,并将两个值传递给它 我正在使用access 2007 谢谢你的帮助:)试试这样的方法(我在主题中找到): 访问查询如下所示: SELECT Repla

我设计了一个访问查询,如下所示:

SELECT Replace(names,'lion','kiss') AS Expr1
FROM table1;
UPDATE [t]
SET [a] = ?
WHERE [a] = ?
这两个值是lionkiss,它们是临时的,现在我希望它们是两个变量,这样我就可以从c#向它传递值

如何从c#调用此查询,并将两个值传递给它

我正在使用access 2007

谢谢你的帮助:)

试试这样的方法(我在主题中找到):

访问查询如下所示:

SELECT Replace(names,'lion','kiss') AS Expr1
FROM table1;
UPDATE [t]
SET [a] = ?
WHERE [a] = ?
传递的参数的名称并不重要,而是传递它们的顺序

通过使用“using”语句,您可以确保.NET正确地释放连接和资源


此外,我强烈建议切换到SQL Server Express Edition。它是免费的,而且比你在Access中所能做的要有效得多。真的,你只是在攻击自己的脚,继续进入Access…

你这样执行它:


sqlcmd2.ExecuteNonQuery()

我认为您需要像这样修改代码

    string q = "SELECT Replace(names,'{0}','{1}') AS Expr1 FROM table1";
//You can provide any values instead of LION and KISS
    string query = string.format(q,"LION","KISS") 

    using(OleDbConnection cnn = (OleDbConnection)DatabaseConnection.Instance.GetConnection())
    {
        cnn.Open();  
        using(OleDbCommand cmd = new OleDbCommand(query, cnn))
            {
            OleDbDataReader reader = cmd.ExecuteReader();
            while(reader.Read())
            {
                Console.WriteLine(reader["Expr1"].toString());
            }
            }
    }

如果你希望得到完整的C#代码,那么你可能需要向我们展示你迄今为止所写的东西?@Sachin Shanbhag:我已经建立了连接和所有东西,我只需要知道如何实现它的方法。我已经写了我自己的代码,使连接和其他东西更新插入,但这是我需要做的事情<代码>OleDbConnection connection1=(OleDbConnection)数据库连接。实例。GetConnection();连接1.Open();OleDbCommand sqlcmd2=新的OleDbCommand(“更新[t]集[a]=@name其中[a]=@f”,renu connection1);sqlcmd2.Parameters.AddWithValue(“b”,名称);sqlcmd2.Parameters.AddWithValue(“a”,路径)@safi-很好。你能用这段代码更新你的问题吗?这将有助于回答。@Sachin Shanbhag:当然可以。我会的。@Anuraj:c#,ACCESS(查询是在ACCESS中设计的,我想在c#中调用它,传递两个值,我使用的是oledb。我只需要知道如何将值传递给ACCESS查询?@safi:所以你需要调用一个具有一些参数的现有ACCESS查询?或者你的c#代码包含查询(如我的回答中所示)可以吗?我想调用我在access中设计的现有查询,并将两个值传递给它。thanks@Vincent瓦坎伯格:是的,我知道,我会改用它,但我必须修复一些错误:)@David不是因为你知道某个怪癖是如何运作的,你知道如何规避它的行为,所以它不再不一致。在Access中您可以自由使用REPLACE,在Jet中您不能。SQL Server没有这样的诡计(或者至少在某种程度上它可以被认为是不存在的)。谢谢,在本例中,string.format(q,“lion”,“kiss”)应该作为参数传递lion和kiss吗?而oledbcommand(“query”,cnn)在本例中,query是我在数据库端访问中设计的名称?-1您应该使用命令参数,不要将查询格式化为字符串,出于安全原因,这是一种不好的做法。@safi:我认为您不能将这两个作为参数传递,因为我们将在C#而不是SQL中替换它。@Darius Kucinskas:我同意。请调查一下这个问题。如何向其传递参数?在回答我在问题中的评论时,他提到他想在C#而不是sql中使用replace。@Anuraj是的,我很抱歉我评论得太快,收回了我的-1:)我很抱歉,但我把代码放在了那里,因为人们可能认为我在寻找一堆代码,而我不是,我在寻求帮助,你写的只是例子的一部分……如果你仔细阅读答案:)我现在投赞成票。