带参数的 ASP.NET ODBC 查询

Posted

技术标签:

【中文标题】带参数的 ASP.NET ODBC 查询【英文标题】:ASP.NET ODBC Query with parameters 【发布时间】:2010-12-04 21:26:17 【问题描述】:

请帮帮我,我不知道下面的代码有什么问题:

        OdbcConnection conn = new OdbcConnection(connString);
        String query = "INSERT INTO customer (custId, custName, custPass, "+
                       "custEmail, custAddress, custAge) VALUES (" +
                       "@ID, @Name, @Pass, @Email, @Address, @Age)";

        OdbcCommand exe = new OdbcCommand(query, conn);
        exe.Parameters.Add("@ID", OdbcType.UniqueIdentifier).Value = id;
        exe.Parameters.Add("@Name", OdbcType.VarChar).Value = name;
        exe.Parameters.Add("@Pass", OdbcType.VarChar).Value = pass;
        exe.Parameters.Add("@Email", OdbcType.VarChar).Value = email;
        exe.Parameters.Add("@Address", OdbcType.VarChar).Value = address;
        exe.Parameters.Add("@Age", OdbcType.Int).Value = age;
        conn.Open();
        exe.ExecuteNonQuery(); // ERROR [07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 6. 

当我尝试执行查询时,此代码向我抛出 Too few parameters. 错误。数据库很好,当我将值硬编码到查询中时它工作正常,而不是使用参数。

谢谢。

【问题讨论】:

尝试将 pass 更改为 passw 可能会与 asp 标识符混淆... 【参考方案1】:

来自 MSDN:

当 CommandType 设置为 Text 时,用于 ODBC 的 .NET Framework 数据提供程序不支持将命名参数传递给 SQL 语句或由 OdbcCommand 调用的存储过程。在这两种情况下,请使用问号 (?) 占位符。例如:

SELECT * FROM Customers WHERE CustomerID = ?

将您的查询重写为

OdbcConnection conn = new OdbcConnection(connString);
    String query = "INSERT INTO customer (custId, custName, custPass, "+
                   "custEmail, custAddress, custAge) VALUES (" +
                   "?, ?, ?, ?, ?, ?)";

参数计数的顺序!

编辑:可以这样添加参数:

OdbcCommand exe = new OdbcCommand(query, conn);
exe.Parameters.Add("ID", OdbcType.UniqueIdentifier).Value = id;
exe.Parameters.Add("Name", OdbcType.VarChar).Value = name;
exe.Parameters.Add("Pass", OdbcType.VarChar).Value = pass;
exe.Parameters.Add("Email", OdbcType.VarChar).Value = email;
exe.Parameters.Add("Address", OdbcType.VarChar).Value = address;
exe.Parameters.Add("Age", OdbcType.Int).Value = age;

【讨论】:

使用 ODBC 到 FilMaker,此语法在 .NET 环境中完美运行,并且参数的 YES 顺序计数! 如果查询参数没有命名,Parameters.Add()中的第一个参数有什么作用? @Scott:其他数据提供者正在使用命名参数。所以我想原因是有相同的 API 您可能仍希望使用名称,以便您可以查找参数以设置后续调用的参数。我还没有在 OdbcCommand 中尝试过,但它们对其他数据库提供程序很有用。【参考方案2】:

您的查询中有一个列不存在。 请检查您的列名。

【讨论】:

【参考方案3】:

通常,当您在 SQL 语句中拼错列名时,您会看到这种情况。您确定这些列名(custId、custName 等)吗?

【讨论】:

我很确定,因为如果我将查询的第三行更改为实际值,它可以正常工作。【参考方案4】:

尝试将 pass 更改为 passw 可能会与 asp 标识符混淆...

【讨论】:

以上是关于带参数的 ASP.NET ODBC 查询的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Repeater里有个 LinkButton 如何调用后台 带参数的方法

ASP.Net Core 2 Razor AJAX GET带参数?

带参数的 PypyODBC:[ODBC Microsoft Access 驱动程序] 参数太少。预期 3(不是日期问题)

odbc_execute 参数不起作用(空警告)

使用参数登录 asp.net 重定向

带参数的sql查询语句