예제 #1
0
        public IQuery SetParameter <T>(string name, T val)
        {
            var type = parameterMetadata.GetNamedParameterExpectedType(name);

            if (type == null)
            {
                if (val is DataTable)
                {
                    type = NHibernateUtil.Structured((val as DataTable).TableName);
                }
                else
                {
                    type = GuessType(typeof(T));
                }
            }

            return(SetParameter(name, val, type));
        }
예제 #2
0
        public void CanCallStoredProcedureWithTableParameterSetSpecifically()
        {
            //NH-3736
            var createTypeSql = "CREATE TYPE dbo.TableType AS TABLE " +
                                "( " +
                                "	a INT, "+
                                "	b INT "+
                                ")";
            var createProcedureSql = "CREATE PROCEDURE dbo.TableProcedure " +
                                     "( " +
                                     "	@t TableType READONLY "+
                                     ") " +
                                     "AS " +
                                     "BEGIN " +
                                     "	SELECT * "+
                                     "	FROM @t "+
                                     "	RETURN @@ROWCOUNT "+
                                     "END";

            var deleteTypeSql      = "DROP TYPE dbo.TableType";
            var deleteProcedureSql = "DROP PROCEDURE dbo.TableProcedure";

            using (var session = this.OpenSession())
            {
                session.CreateSQLQuery(createTypeSql).ExecuteUpdate();
                session.CreateSQLQuery(createProcedureSql).ExecuteUpdate();

                var table = new DataTable("dbo.TableType");
                table.Columns.Add("a", typeof(int));
                table.Columns.Add("b", typeof(int));
                table.Rows.Add(1, 2);

                var result = session.CreateSQLQuery("EXEC dbo.TableProcedure :t").SetParameter("t", table, NHibernateUtil.Structured("dbo.TableType")).List();

                session.CreateSQLQuery(deleteProcedureSql).ExecuteUpdate();
                session.CreateSQLQuery(deleteTypeSql).ExecuteUpdate();

                Assert.IsNotNull(result);
                Assert.IsNotEmpty(result);
            }
        }