SQLite Forum

GetDataTypeName broken?
Login

GetDataTypeName broken?

(1) By anonymous on 2021-11-02 15:39:19 [link]

Hi,

in the past i used reader.GetDataTypeName on to get the type of pragma table_info PK.

Normally this would return the string "Integer", now it will return a empty string.

As workaround I now use reader.GetFieldType().Name.

Is this a known issue?

(2) By mistachkin on 2021-11-04 00:40:30 in reply to 1 [link]

Could you please include some more specifics about the nature of the issue
you are seeing?

For example, a database schema and/or snippet of C# code that demonstrates
the issue.

(3) By anonymous on 2021-11-09 15:35:53 in reply to 2 [link]

First Create a database with:

CREATE TABLE test(
a INTEGER)


then execute the following c# code:

using System;
using System.Data.SQLite;

namespace SQLiteDataTypeTest
{
    class Program
    {
        static void Main(string[] args)
        {
            SQLiteConnection Connection = new SQLiteConnection(@"Data Source=<THE_DATABASE>;");
            Connection.Open();
            
            var sqlCommand = Connection.CreateCommand();
            var sqlQuery = "pragma table_info(test)";

            sqlCommand.CommandText = sqlQuery;

            var reader = sqlCommand.ExecuteReader();

            Console.WriteLine("Column name = " + reader.GetName(5)); //PK column
            Console.WriteLine("Datatype = " + reader.GetDataTypeName(5)); //PK column
            Console.ReadKey();
            reader.Close();
            Connection.Close();
        }
    }
}




This will result in the output:
Column name = pk
Datatype =


Datatype should here be integer since that's the column it's type.

(4.1) By mistachkin on 2021-11-09 16:40:13 edited from 4.0 in reply to 3 [link]

Given what you appear to be trying to accomplish, I think the following query
would work better:

    SELECT * FROM test WHERE 1 = 0;

And then use:

    reader.GetName(0);
    reader.GetDataTypeName(0);

EDIT: Alternatively, you can actually use (with your original example code):

    reader.GetName(2); // "type"
    reader.GetValue(2); // INTEGER

(5) By anonymous on 2021-11-09 22:14:58 in reply to 4.1 [link]

I'm not looking for a alternative, this is used in a more complex code.

This was just a basic example to show it's broken.
In 35 it still worked

(6) By mistachkin on 2021-11-10 02:13:45 in reply to 5 [link]

Your example executes the SQL statement "PRAGMA table_info(test)".

However, the result rows returned by that SQL statement do not have
associated data type names, because those rows are not actually part
of a declared table.

(7) By anonymous on 2021-11-10 07:26:25 in reply to 6 [link]

Yes, but in 1.0.35.0 it still worked.
Which means the versions are not backwards compatible.

Therefore is this broken or is this intended?

(8) By anonymous on 2021-11-10 09:25:26 in reply to 7

1.0.92.0 I mean.

(9) By mistachkin on 2021-11-10 21:20:34 in reply to 8 [link]

I'm not sure how you were able to get a different result before; however,
everything appears to be working as designed.