public void Setup() { JET_TABLEID tableidTemp = new JET_TABLEID() { Value = (IntPtr)456, }; this.managed = new JET_TABLECREATE() { szTableName = "table7", szTemplateTableName = "parentTable", ulPages = 7, ulDensity = 63, rgcolumncreate = null, cColumns = 0, rgindexcreate = null, cIndexes = 0, szCallback = "module!FunkyFunction", cbtyp = JET_cbtyp.AfterReplace, grbit = CreateTableColumnIndexGrbit.FixedDDL, pSeqSpacehints = null, pLVSpacehints = null, cbSeparateLV = 0x999, tableid = tableidTemp, cCreated = 3, }; this.native = this.managed.GetNativeTableCreate4(); }
public static extern int JetCreateTableColumnIndex4W(IntPtr sesid, uint dbid, ref NATIVE_TABLECREATE4 tablecreate3);
/// <summary> /// Creates a table, adds columns, and indices on that table. /// </summary> /// <param name="sesid">The session to use.</param> /// <param name="dbid">The database to which to add the new table.</param> /// <param name="tablecreate">Object describing the table to create.</param> /// <returns>An error if the call fails.</returns> private static int CreateTableColumnIndex4( JET_SESID sesid, JET_DBID dbid, JET_TABLECREATE tablecreate) { NATIVE_TABLECREATE4 nativeTableCreate = tablecreate.GetNativeTableCreate4(); unsafe { var handles = new GCHandleCollection(); try { // Convert/pin the column definitions. nativeTableCreate.rgcolumncreate = (NATIVE_COLUMNCREATE *)GetNativeColumnCreates(tablecreate.rgcolumncreate, true, ref handles); // Convert/pin the index definitions. NATIVE_INDEXCREATE3[] nativeIndexCreates = GetNativeIndexCreate3s(tablecreate.rgindexcreate, ref handles); nativeTableCreate.rgindexcreate = handles.Add(nativeIndexCreates); // Convert/pin the space hints. if (tablecreate.pSeqSpacehints != null) { NATIVE_SPACEHINTS nativeSpaceHints = tablecreate.pSeqSpacehints.GetNativeSpaceHints(); nativeTableCreate.pSeqSpacehints = (NATIVE_SPACEHINTS *)handles.Add(nativeSpaceHints); } if (tablecreate.pLVSpacehints != null) { NATIVE_SPACEHINTS nativeSpaceHints = tablecreate.pLVSpacehints.GetNativeSpaceHints(); nativeTableCreate.pLVSpacehints = (NATIVE_SPACEHINTS *)handles.Add(nativeSpaceHints); } int err = NativeMethods.JetCreateTableColumnIndex4W(sesid.Value, dbid.Value, ref nativeTableCreate); // Modified fields. tablecreate.tableid = new JET_TABLEID { Value = nativeTableCreate.tableid }; tablecreate.cCreated = checked ((int)nativeTableCreate.cCreated); if (tablecreate.rgcolumncreate != null) { for (int i = 0; i < tablecreate.rgcolumncreate.Length; ++i) { tablecreate.rgcolumncreate[i].SetFromNativeColumnCreate(ref nativeTableCreate.rgcolumncreate[i]); } } if (tablecreate.rgindexcreate != null) { for (int i = 0; i < tablecreate.rgindexcreate.Length; ++i) { tablecreate.rgindexcreate[i].SetFromNativeIndexCreate(ref nativeIndexCreates[i]); } } return(Err(err)); } finally { handles.Dispose(); } } }
public static extern int JetCreateTableColumnIndex4W(IntPtr sesid, uint dbid, ref NATIVE_TABLECREATE4 tablecreate3);