Как создать базу данных Access во время выполнения в C#?

Как я могу создать базу данных доступа во время выполнения в C#?

5 ответов

Первое, что вам нужно сделать, это получить ссылку COM на Microsoft ADO Ext. XX для DDL и безопасности. XX представляет любую версию, которая у вас есть на вашем компьютере. Раньше у меня была версия 2.7, но в Visual Studio 2008 она была обновлена ​​до 6.0.

http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/CreateanAccessDatabaseinC_10DDD/AddReference_2.png

Как только вы добавите ссылку, ADOX будет добавлен в раздел использования вашего кода.

http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/CreateanAccessDatabaseinC_10DDD/Using_2.png

Далее вам захочется создать каталог для базы данных. Вставьте желаемое имя файла в следующую строку и передайте его в CatalogClass.

CatalogClass cat = new CatalogClass();  
string tmpStr;  
string filename = "Sample.MDB";   
tmpStr = "Provider=Microsoft.Jet.OLEDB.4.0;";   
tmpStr += "Data Source=" + filename + ";Jet OLEDB:Engine Type=5";  
cat.Create(tmpStr);

Следующим шагом является создание таблицы и столбцов для вашей базы данных. Это довольно прямолинейная операция, как показано в примере ниже.

 Table nTable = new Table(); 
 nTable.Name = "PersonData"; 
 nTable.Columns.Append("LastName", DataTypeEnum.adVarWChar, 25);
 nTable.Columns.Append("FirstName", DataTypeEnum.adVarWChar, 25);
 nTable.Columns.Append("Address 1", DataTypeEnum.adVarWChar, 45);
 nTable.Columns.Append("Address 2", DataTypeEnum.adVarWChar, 45); 
 nTable.Columns.Append("City", DataTypeEnum.adVarWChar, 25);
 nTable.Columns.Append("State", DataTypeEnum.adVarWChar, 2);
 nTable.Columns.Append("Zip", DataTypeEnum.adVarWChar, 9);
 cat.Tables.Append(nTable);

Последний шаг очень важен, иначе при закрытии приложения вы получите ошибку. После того, как все таблицы и столбцы будут добавлены, вам нужно будет освободить com-объекты правильно и в правильном порядке.

System.Runtime.InteropServices.Marshal.FinalReleaseComObject(nTable); 
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat.Tables);    
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat.ActiveConnection); 
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat);

Вот и все. Теперь у вас должна быть база данных Access, в которую вы можете писать. Надеюсь это поможет.

Справка: Джон Рассел Плант - Создание базы данных доступа в C#

Создайте пустую базу данных доступа и сохраните ее в файлах ресурсов.

Теперь, когда вы захотите использовать ее, извлеките эту базу данных из ваших ресурсов и скопируйте ее туда, куда вы хотите, переименуйте ее во что угодно и запустите скрипт установки базы данных, чтобы создать таблицы по умолчанию и загрузить в них значения.

В этой статье от John Russell Plant объясняется, как вы будете делать это в деталях с примерами кода. Есть три шага:

  1. Создать каталог.
  2. Создайте таблицы.
  3. Отпустите соответствующие объекты COM.

Пытаться:

using ADOX; //Requires Microsoft ADO Ext. 2.8 for DDL and Security
using ADODB;

public bool CreateNewAccessDatabase(string fileName)
{
  bool result = false; 

  ADOX.Catalog cat = new ADOX.Catalog();
  ADOX.Table table = new ADOX.Table();

  //Create the table and it's fields. 
  table.Name = "Table1";
  table.Columns.Append("Field1");
  table.Columns.Append("Field2");

  try
  {
    cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + "; Jet OLEDB:Engine Type=5");
    cat.Tables.Append(table);

    //Now Close the database
    ADODB.Connection con = cat.ActiveConnection as ADODB.Connection;
    if (con != null)
    con.Close();

    result = true; 
  }
  catch (Exception ex)
  {
    result = false;
  }
  cat = null;
  return result;
} 

http://zamirsblog.blogspot.com/2010/11/creating-access-database.html

static void IF_EXISTS_DELETE_AND_CREATE(string cn)
{
    //cn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =";
    //cn += AppDomain.CurrentDomain.BaseDirectory.ToString() + "test.mdb"; 
    try
    {
        OleDbConnection connection = new OleDbConnection(cn);
        object[] objArrRestrict;
        objArrRestrict = new object[] { null, null, null, "TABLE" };
        connection.Open();
        DataTable schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, objArrRestrict);
        connection.Close();
        string[] list;
        if(schemaTable.Rows.Count > 0)
        {
            list = new string[schemaTable.Rows.Count];
            int i = 0;
            foreach (DataRow row in schemaTable.Rows)
            {
                list[i++] = row["TABLE_NAME"].ToString();
            }
            for ( i = 0; i < list.Length; i++)
            {
                if(list[i] == "TEMP")
                {
                    string deletedl = "DROP TABLE TEMP";
                    using (OleDbConnection conn = new OleDbConnection(cn))
                    {
                        using (OleDbCommand cmd = new OleDbCommand(deletedl, conn))
                        {

                            conn.Open();
                            cmd.ExecuteNonQuery();
                            conn.Close();
                        }
                    }
                    break;
                }
            }
        }
        string ddl = "CREATE TABLE TEMP (USERID INTEGER NOT NULL,[ADATE] TEXT(20), [ATIME] TEXT(20))";
        using(OleDbConnection conn = new OleDbConnection(cn))
        {                    
            using(OleDbCommand cmd = new OleDbCommand(ddl, conn))
            {
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.Close();
            }
        }
    }
    catch (System.Exception e)
    {
        string ex = e.Message;
    }
}
Другие вопросы по тегам