如何将参数传递给对象查询?

温妮·瓦雷斯·索索托纳

我在MS Access中有一个对象查询(getUserLogin),它将执行以下操作:

PARAMETERS prmUsername Text, prmPassword Text;

SELECT ID, LastName, FirstName, MiddleName
FROM tblUsers
WHERE Username = [prmUsername] AND Password = [prmPassword];

我的C#中有一个方法可以在MS Access(getUserLogin)中执行对象查询。

public bool login(string username, string password)
{
    com = new OdbcCommand("EXEC getUserLogin", con);

    com.CommandType = CommandType.StoredProcedure;

    com.Parameters.Add("prmUsername", OdbcType.Text).Value = username;
    com.Parameters.Add("prmPassword", OdbcType.Text).Value = password;

    con.Open();

    rea = com.ExecuteReader(); //OdbcException goes here

    if (rea.HasRows == true)
        return true;
    else
        return false;
}

我收到此OdbcException:

错误[07002] [Microsoft] [ODBC Microsoft Access驱动程序]参数太少。预期2。

戈德·汤普森

您的第一个问题是查询使用的参数名称与相应的字段名称相同。如果尝试在Access中运行查询,它将提示您输入“ Username”和“ Password”参数,然后返回tblUsers中的所有行,而不管您输入的参数值如何那是因为当Access SQL解析器处理时

... WHERE Username = [Username] AND Password = [Password]

...它解释[Username][Password]作为字段名称,而不是参数名称,并且结果与

... WHERE True AND True

因此,您需要做的第一件事就是更改参数名称。一种相对常见的约定是对参数名称使用“ prm”前缀,因此您的查询将是

PARAMETERS prmUsername Text, prmPassword Text;
SELECT [ID], [LastName], [FirstName], [MiddleName]
FROM [tblUsers]
WHERE [Username] = [prmUsername] AND [Password] = [prmPassword];

现在,要在C#应用程序中传递参数值,您需要使用System.Data。OleDb(不是.Odbc)的代码是这样的

using (var con = new OleDbConnection(myConnectionString))
{
    con.Open();
    using (var cmd = new OleDbCommand())
    {
        cmd.Connection = con;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "loginQuery";
        cmd.Parameters.Add("prmUsername", OleDbType.VarWChar).Value = "eric";
        cmd.Parameters.Add("prmPassword", OleDbType.VarWChar).Value = "abcdefg";
        using (OleDbDataReader rdr = cmd.ExecuteReader())
        {
            if (rdr.Read())
            {
                Console.WriteLine("Row found: ID = {0}", rdr["ID"]);
            }
            else
            {
                Console.WriteLine("Row not found.");
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将查询参数传递给程序?

来自分类Dev

如何将查询参数传递给Devise的登录页面

来自分类Dev

如何将参数传递给Microsoft SQL Server查询?

来自分类Dev

如何将参数传递给查询者问题?

来自分类Dev

如何将参数传递给组件查询(非静态)?

来自分类Dev

如何将动态参数传递给查询?

来自分类Dev

如何将参数传递给对象文字中的函数

来自分类Dev

如何将通用参数传递给使用对象的方法?

来自分类Dev

如何将参数传递给片段?

来自分类Dev

如何将参数传递给线程?

来自分类Dev

如何将参数传递给ValidationAttribute?

来自分类Dev

如何将参数传递给BootstrapperFile?

来自分类Dev

如何将参数传递给jvmmon?

来自分类Dev

如何将参数传递给exe?

来自分类Dev

如何将参数传递给嵌入

来自分类Dev

如何将参数传递给sed?

来自分类Dev

如何将参数传递给BootstrapperFile?

来自分类Dev

如何将参数传递给别名?

来自分类Dev

如何将参数传递给jvmmon?

来自分类Dev

如何将参数传递给ElapsedEventHandler

来自分类Dev

如何将参数传递给boilermake

来自分类Dev

如何将参数传递给模态

来自分类Dev

如何将参数传递给路由

来自分类Dev

如何将参数传递给路由?

来自分类Dev

如何将ID与查询参数一起传递给$ resource?

来自分类Dev

如何将SQL查询作为包含双引号的参数传递给psql

来自分类Dev

Laravel 5:如何将参数传递给内部where查询

来自分类Dev

d3.js如何将参数传递给php以查询条件

来自分类Dev

如何将哈希查询参数传递给AWS API Gateway?