我在C#
中有一个使用Microsoft Office Access
存储的项目。我可以阅读并保存到数据库中。
现在我需要允许用户使用新的数据库项目,但结构类似于工作项目,并且还要实现Save As
选项。
此外,我需要导出到文本文件/ CSV。
任何想法或示例代码都会有所帮助。
答案 0 :(得分:1)
创建空白数据库的一种方法是尝试以下
using System;
using ADOX;
public class CreateDB
{
public static void Main( string [] args )
{
ADOX.CatalogClass cat = new ADOX.CatalogClass();
string create =
@"Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\BlankAccessDB\MyAccessDBCreatedFromCsharp.mdb;" +
"Jet OLEDB:Engine Type=5";
cat.Create(create);
cat = null;
}
}
Save和SaveAs都像使用SaveFileDialog一样简单,提示用户指定保存文件的文件名和位置。
答案 1 :(得分:0)
我这样做的方法是创建一个新的空访问数据库文件(大约100 KB),然后将该文件作为资源嵌入我的应用程序中。然后,“创建”一个新数据库就是将资源提取到一个文件 - 这会给你一个空白数据库 - 然后运行一个模式更新代码来创建你需要在空白数据库中的模式然后离开。
我有一个项目,其中包含一个要嵌入的空数据库集,一个类,下面有一个方法,呃,就是它。
这是从嵌入式资源中转储文件的代码 - 它不是最新版本,我在6年前编写它但没有必要更改它:
public void CreateDatabase(string sPath)
{
// Get the resource and, er write it out?
System.IO.Stream DBStream;
System.IO.StreamReader dbReader;
System.IO.FileStream OutputStream;
OutputStream = new FileStream(sPath, FileMode.Create);
Assembly ass = System.Reflection.Assembly.GetAssembly(this.GetType());
DBStream = ass.GetManifestResourceStream("SoftwareByMurph.blank.mdb");
dbReader = new StreamReader(DBStream);
for(int l=0;l < DBStream.Length;l++)
{
OutputStream.WriteByte((byte)DBStream.ReadByte());
}
OutputStream.Close();
}
简单,有效且.dll为124 KB。
注意我使用一个完全空白且空的Access文件 - 尝试在嵌入式文件中维护正确的模式会导致它增长(因为.mdb文件的工作方式)并且可能导致传送数据 - 这可能是不应该发生。模式本身是由我从代码运行的单独的DDL(SQL)块创建/更新/维护的。
导出到.CSV是徒劳无功的,因为你几乎只需要迭代表中的列,但是为了更智能的方法,请查看FileHelpers。