首页 > 代码库 > WPF 自动选择dll,以SQLite为例

WPF 自动选择dll,以SQLite为例

在学习sqlite的过程中,发现它的dll是区分32位和64位的,起初觉得很恼火,但是仔细看了下,

发现让程序自行选择dll其实也不是一件很麻烦的事情,如下:

1>创建一个sqlite数据

2>创建一个工程

3>新建一个类

 1 class Entrance : Application 2     { 3         [STAThread] 4         static void Main() 5         { 6             string dll32 = @".\SQLitedll\System.Data.SQLite32.dll"; 7             string dll64 = @".\SQLitedll\System.Data.SQLite64.dll"; 8             string dllpath = @".\System.Data.SQLite.dll"; 9 10             if (IntPtr.Size == 8)11             {12                 using (FileStream fs=File.Create(dllpath)){}13                 File.Copy(dll64,dllpath,true);14             }15             else if(IntPtr.Size == 4)16             {17                 using (FileStream fs=File.Create(dllpath)){}18                 File.Copy(dll32,dllpath,true);19             }20             else21             {MessageBox.Show("ERROR!");}22             //start up the main window23             Application app = new Application();24             MainWindow window = new MainWindow();25             app.Run(window);26         }27     }

 

4>添加按钮响应事件

 1 private void Button_Click(object sender, RoutedEventArgs e) 2         { 3             string strconn = @"Data Source=.\student.db;Version=3"; 4             string strcmd = "select * from stu"; 5             SQLiteConnection con = new SQLiteConnection(strconn); 6             try 7             { 8                 con.Open(); 9             }10             catch (Exception ex)11             { MessageBox.Show(ex.ToString()); }12 13 14             SQLiteCommand cmd = new SQLiteCommand(strcmd, con);15 16 17             cmd.ExecuteNonQuery();18 19             SQLiteDataAdapter dataApp = new SQLiteDataAdapter(cmd);20             DataTable dt = new DataTable("a");21             dataApp.Fill(dt);22             dataGrid1.ItemsSource = dt.DefaultView;23             dataApp.Update(dt);24             con.Close();25         }26     }

5>最终效果(左边是win8 64位测试效果,右边是xp 32位测试效果)[注:新版的System.Data.SQLite.dll可能需要msvcr100.dll的支持,在测试

的机器上如果没有这个dll会莫名地崩溃,还catch不到异常,具体可能跟版本有关,可以用depends来查看一下]

WPF 自动选择dll,以SQLite为例