为什么通过 ODBC C# 进行参数化不绑定?
Why is parametrization via ODBC C# not binding?
我找到了这个 How to bind parameters via ODBC C#? 示例,说明如何在 C# 中通过 ODBC 进行参数化,但在我的代码中,CommandText 保留为“?”和 returns 错误 - 这是预期的。
这是我的代码:
string variable = SVariablaKlas.ToUpper(); //this is simple var like 123
Conn odbc = new Conn();
odbc.db.Open(); //this works fine -> connection is established
OdbcCommand dbCommand = odbc.db.CreateCommand();
dbCommand.CommandText = "";
if (a)
{
dbCommand.CommandText = "SELECT col1 FROM TableName WHERE ID = ?";
} else if (b)
{
dbCommand.CommandText = "SELECT col2 FROM TableName WHERE ID = ?";
}
dbCommand.Parameters.ADD("@ID", OdbcType.Char).Value = variable;
//or if I try this: ...Parameters.ADD(new OdbcParameter(string.Empty, variable);
OdbcDataReader dbReader = dbCommand.ExecuteReader();
...
在我的两种情况下 "Parameters.ADD",我的 dbCommand.CommandText 将是 "SELECT col1 FROM TableName WHERE ID = ?" 然后我会得到错误: "WHERE" 附近的错误 [HY000]:语法错误( 1)
知道问题出在哪里吗?
对于数据库,我使用的是 SQLite3 和 ODBC 驱动程序 SQLite3 ODBC 驱动程序,版本 0.9993.00.00
你的 SQL 应该是
dbCommand.CommandText = "SELECT col2 FROM TableName WHERE ID = @ID";
因为您的参数被命名为“@ID”
我找到了这个 How to bind parameters via ODBC C#? 示例,说明如何在 C# 中通过 ODBC 进行参数化,但在我的代码中,CommandText 保留为“?”和 returns 错误 - 这是预期的。
这是我的代码:
string variable = SVariablaKlas.ToUpper(); //this is simple var like 123
Conn odbc = new Conn();
odbc.db.Open(); //this works fine -> connection is established
OdbcCommand dbCommand = odbc.db.CreateCommand();
dbCommand.CommandText = "";
if (a)
{
dbCommand.CommandText = "SELECT col1 FROM TableName WHERE ID = ?";
} else if (b)
{
dbCommand.CommandText = "SELECT col2 FROM TableName WHERE ID = ?";
}
dbCommand.Parameters.ADD("@ID", OdbcType.Char).Value = variable;
//or if I try this: ...Parameters.ADD(new OdbcParameter(string.Empty, variable);
OdbcDataReader dbReader = dbCommand.ExecuteReader();
...
在我的两种情况下 "Parameters.ADD",我的 dbCommand.CommandText 将是 "SELECT col1 FROM TableName WHERE ID = ?" 然后我会得到错误: "WHERE" 附近的错误 [HY000]:语法错误( 1)
知道问题出在哪里吗?
对于数据库,我使用的是 SQLite3 和 ODBC 驱动程序 SQLite3 ODBC 驱动程序,版本 0.9993.00.00
你的 SQL 应该是
dbCommand.CommandText = "SELECT col2 FROM TableName WHERE ID = @ID";
因为您的参数被命名为“@ID”