diff --git a/Dapper NET40/SqlMapper.cs b/Dapper NET40/SqlMapper.cs index 4287a1e586d4dd25cad61ef5c546f1f7a747de72..91c332063cac392bfe8b7391a83d731ae572a8d2 100644 --- a/Dapper NET40/SqlMapper.cs +++ b/Dapper NET40/SqlMapper.cs @@ -3813,9 +3813,18 @@ public TableValuedParameter(DataTable table, string typeName) } void SqlMapper.ICustomQueryParameter.AddParameter(IDbCommand command, string name) { - var param = new System.Data.SqlClient.SqlParameter(name, SqlDbType.Structured); + var param = command.CreateParameter(); + param.ParameterName = name; param.Value = (object)table ?? DBNull.Value; - if (!string.IsNullOrEmpty(typeName)) param.TypeName = typeName; + if (!string.IsNullOrEmpty(typeName)) + { + var sqlParam = param as System.Data.SqlClient.SqlParameter; + if (sqlParam != null) + { + sqlParam.TypeName = typeName; + sqlParam.SqlDbType = SqlDbType.Structured; + } + } command.Parameters.Add(param); } } diff --git a/Tests/Tests.cs b/Tests/Tests.cs index e8f743762a30c5e182c3ec911c36949b70ca60bb..b6b17afd2f3da10b26dc2054112471799f94529f 100644 --- a/Tests/Tests.cs +++ b/Tests/Tests.cs @@ -2835,6 +2835,15 @@ public void DataTableParameters() count = connection.Query("select count(1) from @ids", new { ids = table.AsTableValuedParameter("MyTVPType") }).First(); count.IsEqualTo(3); + + try + { + connection.Query("select count(1) from @ids", new { ids = table.AsTableValuedParameter() }).First(); + throw new InvalidOperationException(); + } catch(Exception ex) + { + ex.Message.Equals("The table type parameter 'ids' must have a valid type name."); + } } #if POSTGRESQL