From: Dmitry G. <dmi...@gm...> - 2008-10-31 12:18:05
|
Not sure if this is the right place, but I've found a bug with OdbcParameter mapped to String column in SQL Query. My Environment: - Firebird-1.5.5.4926-3-Win32.exe - Firebird_ODBC_2.0.0-Win32.exe - Windows Vista Business 32bit - .Net Framework 3.5 Here's the testcase: === begin === [TestFixture] public class TestFirebirdOdbc { readonly Config config = new Config { DataSource = "localhost", Database = Environment.ExpandEnvironmentVariables( @"%PROGRAMFILES%\firebird\firebird_1_5\examples\employee.fdb"), GstatExecutable = @"%PROGRAMFILES%\firebird\firebird_1_5\bin\gstat.exe", UserName = "SYSDBA", Password = "masterkey" }; [Test] public void TestSimpleQuery() { var conn = FirebirdUtils.GetOdbcConnection(config); using (conn) { conn.Open(); var cmd = conn.CreateCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = "SELECT count(*) FROM SALES"; var result = (int)cmd.ExecuteScalar(); Assert.AreEqual(33, result); cmd = conn.CreateCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = "SELECT * FROM SALES"; using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { for (int i = 0; i < 10; i++) { Console.Write(reader.GetName(i) + " = " + reader.GetValue(i) + "\t"); } Console.WriteLine(); } } } } [Test] public void TestQueryWithStringParameter() { var conn = FirebirdUtils.GetOdbcConnection(config); using (conn) { conn.Open(); var cmd = conn.CreateCommand(); cmd.CommandText = "SELECT count(*) FROM SALES WHERE PO_NUMBER = ?"; var param = cmd.CreateParameter(); param.Value = "V91E0210"; cmd.Parameters.Add(param); var result = (int)cmd.ExecuteScalar(); Assert.AreEqual(1, result); } } [Test] public void TestQueryWithBuiltinStringParameter() { var conn = FirebirdUtils.GetOdbcConnection(config); using (conn) { conn.Open(); var cmd = conn.CreateCommand(); cmd.CommandText = "SELECT count(*) FROM SALES WHERE PO_NUMBER = 'V91E0210'"; var result = (int)cmd.ExecuteScalar(); Assert.AreEqual(1, result); } } [Test] public void TestQueryWithIntParameter() { var conn = FirebirdUtils.GetOdbcConnection(config); using (conn) { conn.Open(); var cmd = conn.CreateCommand(); cmd.CommandText = "SELECT count(*) FROM SALES WHERE CUST_NO = ?"; var param = cmd.CreateParameter(); param.Value = "1004"; cmd.Parameters.Add(param); var result = (int)cmd.ExecuteScalar(); Assert.AreEqual(2, result); } } [Test] public void TestQueryWithBuiltinIntParameter() { var conn = FirebirdUtils.GetOdbcConnection(config); using (conn) { conn.Open(); var cmd = conn.CreateCommand(); cmd.CommandText = "SELECT count(*) FROM SALES WHERE CUST_NO = 1004"; var result = (int)cmd.ExecuteScalar(); Assert.AreEqual(2, result); } } } === end === All tests should pass, but TestQueryWithStringParameter fails. I've downloaded Firebird .Net Provider and use FbXXX interfaces instead of OdbcXXX. With FbXXX all the tests passed. Hope this will help. Regards, Dmitry Gusev |