Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversion failed when using User Defined Table Types #424

Open
2 tasks done
daniellittledev opened this issue Nov 29, 2022 · 1 comment
Open
2 tasks done

Conversion failed when using User Defined Table Types #424

daniellittledev opened this issue Nov 29, 2022 · 1 comment
Assignees

Comments

@daniellittledev
Copy link

Issue Summary

When using a User Defined Table Type it appears to write the value to the wrong column, resulting in a database conversion error. Using the SQL profiler I can see this error occurs before executing the SQL and only when the @parameter has one or more items. If it is empty or removed the command executes successfully.

Error

System.Data.SqlClient.SqlException: 'Conversion failed when converting the nvarchar value 'TestName' to data type int.
The statement has been terminated.'

To Reproduce

Possibly share SQL Schema, snippets of data, and how you call it in F#.

Sample to reproduce the behavior:

Table and Table Type

Create Table [TestTable] (
	[C1] UniqueIdentifier Not Null,
	[C2] UniqueIdentifier Not Null,
	[C3] UniqueIdentifier Not Null,

	[C4] NVarChar(100) Not Null,
	[C5] NVarChar(100) Not Null,
	[C6] NVarChar(100) Null,
	[C7] NVarChar(1000) Not Null,

	[C8] Int Not Null,

	[C9] VarChar(10) Not Null,
	[C10] UniqueIdentifier Not Null,
	[C11] UniqueIdentifier Not Null,

	Constraint [PK_Id] Primary Key Clustered([C1], [C2], [C3])
);
Create Type [dbo].[TestTableItem] AS Table(
	[C3] UniqueIdentifier Not Null,
	[C5] NVarChar(100) Not Null,
	[C6] NVarChar(100) Null,
	[C7] NVarChar(1000) Not Null,
	[C8] Int Not Null,
	[C9] VarChar(10) Not Null,
	[C10] UniqueIdentifier Not Null
);

SqlCommandProvider

type AddSqlCommand = SqlCommandProvider<"
    Insert [TestTable]
    (
        [C1],
        [C2],
        [C11],
        [C4],
        [C2],
        [C5],
        [C6],
        [C7],
        [C8],
        [C9],
        [C10]
    )
    Select
        @C1,
        @C2,
        @C11,
        @C4,
        x.[C3],
        x.[C5],
        x.[C6],
        x.[C7],
        x.[C8],
        x.[C9],
        x.[C10]
    From @C12 x;
    " , staticConnectionString, TableVarMapping = "@C12=TestTableItem">

Usage

use cmd = new AddSqlCommand(connection, transaction = transaction)

let items =
    [
        AddSqlCommand.TestTableItem(
            C3 = Guid.NewGuid(),
            C5 = "TestName",
            C6 = "C6",
            C7 = "C7",
            C8 = 1,
            C9 = "C9",
            C10 = Guid.NewGuid()
        )
    ]

return!
    cmd.AsyncExecute(
        C1 = Guid.NewGuid(),
        C2 = Guid.NewGuid(),
        C4 = "C4 Name",
        C11 = Guid.NewGuid(),
        C12 = items
    )

Expected behavior

The query should successfully insert a new row.

What you can do

  • I am willing to contribute a PR with a unit test showcasing the issue
  • I am willing to test the bug fix before next release
smoothdeveloper added a commit to smoothdeveloper/FSharp.Data.SqlClient that referenced this issue Dec 3, 2022
@smoothdeveloper
Copy link
Collaborator

@daniellittledev I've tried to reproduce the issue in #425 but the added test doesn't throw a SqlException, do you mind trying it out and adjust the test accordingly to reproduce your issue?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants