Giorgi / DuckDB.NET

Bindings and ADO.NET Provider for DuckDB
https://duckdb.net
MIT License
338 stars 61 forks source link

Invalid Input Error statement parameter name of chinese #177

Closed LokiSharp closed 3 months ago

LokiSharp commented 3 months ago

Can I use chinese parameters name at statement parameter

using Dapper;
using DuckDB.NET.Data;

namespace DapperDuckDBTest;

public class UnitTest1
{
    [Fact]
    public void TestDatabaseInitializer()
    {
        using var connection = new DuckDBConnection("Data Source=test.db");
        connection.Open();

        connection.Execute(@"
CREATE TABLE Model
(
    Name      VARCHAR,
    Number    SMALLINT,
    数字      SMALLINT
);");
        connection.Close();
    }

    [Fact]
    public void TestDatabaseInserter()
    {
        using var connection = new DuckDBConnection("Data Source=test.db");
        connection.Open();

        var models = new List<Model>
        {
            new Model { Name = "LokiSharp", Number = 1, 数字 = 0 },
            new Model { Name = "LokiSharp", Number = 2, 数字 = 0 },
            new Model { Name = "LokiSharp", Number = 3, 数字 = 0 },
        };

        foreach (var model in models)
        {
            connection.Execute(@"INSERT INTO Model (Name, Number, 数字) VALUES ($Name, $Number, $数字);", new {Name = model.Name, Number = model.Number, 数字 = model.数字});
        }       
    }
}
DuckDB.NET.Data.DuckDBException: Invalid Input Error: Values were not provided for the following prepared statement parameters: 数字

DuckDB.NET.Data.DuckDBException
Invalid Input Error: Values were not provided for the following prepared statement parameters: 数字
   at DuckDB.NET.Data.PreparedStatement.Execute(DuckDBParameterCollection parameterCollection)
   at DuckDB.NET.Data.PreparedStatement.PrepareMultiple(DuckDBNativeConnection connection, String query, DuckDBParameterCollection parameters)+MoveNext()
   at DuckDB.NET.Data.DuckDbCommand.ExecuteNonQuery()
   at Dapper.SqlMapper.ExecuteCommand(IDbConnection cnn, CommandDefinition& command, Action`2 paramReader) in /_/Dapper/SqlMapper.cs:line 2965
   at Dapper.SqlMapper.ExecuteImpl(IDbConnection cnn, CommandDefinition& command) in /_/Dapper/SqlMapper.cs:line 656
   at Dapper.SqlMapper.Execute(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Nullable`1 commandTimeout, Nullable`1 commandType) in /_/Dapper/SqlMapper.cs:line 527
   at DapperDuckDBTest.UnitTest1.TestDatabaseInserter() in C:\Users\LokiSharp\Desktop\DapperDuckDBTest\DapperDuckDBTest\UnitTest1.cs:line 40
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
LokiSharp commented 3 months ago

Thank you