📄 mainform.cs
字号:
//* Copyright (c) 2008, Scott "Johnny" Smith (www.JohnnyCantCode.com)
//* All rights reserved.
//*
//* Redistribution and use in source and binary forms, with or without
//* modification, are permitted provided that the following conditions are met:
//* * Redistributions of source code must retain the above copyright
//* notice, this list of conditions and the following disclaimer.
//* * Redistributions in binary form must reproduce the above copyright
//* notice, this list of conditions and the following disclaimer in the
//* documentation and/or other materials provided with the distribution.
//* * Neither the name of the <organization> nor the
//* names of its contributors may be used to endorse or promote products
//* derived from this software without specific prior written permission.
//*
//* THIS SOFTWARE IS PROVIDED BY Scott "Johnny" Smith ``AS IS'' AND ANY
//* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
//* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
//* DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
//* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
//* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
//* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
//* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
//* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
//* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using System.IO;
using System.Reflection;
using System.Configuration;
using System.Diagnostics;
using System.Threading;
namespace GLT.SqlCopy
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
ddlAuthType.SelectedItem = "Windows Authentication";
}
private void ddlAuthType_SelectedIndexChanged(object sender, EventArgs e)
{
if (ddlAuthType.Text == "Windows Authentication")
{
tbLogin.Enabled = false;
tbPassword.Enabled = false;
lblLogin.Enabled = false;
lblPassword.Enabled = false;
}
else
{
tbLogin.Enabled = true;
tbPassword.Enabled = true;
lblLogin.Enabled = true;
lblPassword.Enabled = true;
tbLogin.Focus();
tbLogin.SelectAll();
}
}
private Server SourceServer = null;
private void ddlCatalog_DropDown(object sender, EventArgs e)
{
if (ddlAuthType.Text == "SQL Server Authentication")
{
ServerConnection svrConn = new ServerConnection(tbServerName.Text);
svrConn.LoginSecure = false;
svrConn.Login = tbLogin.Text;
svrConn.Password = tbPassword.Text;
SourceServer = new Server(svrConn);
}
else
SourceServer = new Server(tbServerName.Text);
ddlCatalog.Items.Clear();
try
{
foreach (Database db in SourceServer.Databases)
{
ddlCatalog.Items.Add(db.Name);
}
}
catch (ConnectionFailureException ex)
{
MessageBox.Show(this, ex.Message, "Connection Failed!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void btnSelectPath_Click(object sender, EventArgs e)
{
if (saveFileDialog1.ShowDialog(this) == DialogResult.OK)
{
tbDestPath.Text = saveFileDialog1.FileName;
}
}
private bool IsSourceReady()
{
if (String.IsNullOrEmpty(tbServerName.Text))
return false; //no server has been selected
if (ddlAuthType.Text == "SQL Server Authentication" && String.IsNullOrEmpty(tbLogin.Text))
return false; //Auth type is Sql server but no login has been provided
if (SourceServer != null && SourceServer.Name.ToLower() == tbServerName.Text.ToLower())
return false; //already connected and retrieve this servers databases
return true;
}
private bool IsDestinationReady()
{
if (String.IsNullOrEmpty(tbDestPath.Text))
return false; //no destination path for the file
return true;
}
private void btnBeginCopy_Click(object sender, EventArgs e)
{
SetStatus("Checking paths to System.Data.SqlServerCe.dll...");
if (!CheckSQLMobileAssemblyPaths())
{
MessageBox.Show(this, "Please update the SQL Mobile paths in the App.Config file. The paths must point to the 3.0 version and the 3.5 version of the System.Data.SqlServerCe.dll", "System.Data.SqlServerCe.dll versions not found!", MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.Exit();
return;
}
rbVer3.Enabled = false;
rbVer35.Enabled = false;
DoMobileCopy();
}
private void SetStatus(string txt)
{
lblStatus.Text = txt;
Application.DoEvents();
//Thread.Sleep(300);
}
private bool CheckSQLMobileAssemblyPaths()
{
string path30 = GLT.SqlCopy.Properties.Settings.Default.SQLMobile30;
string path35 = GLT.SqlCopy.Properties.Settings.Default.SQLMobile35;
bool retVal = true;
if (File.Exists(path30))
{
FileVersionInfo ver = FileVersionInfo.GetVersionInfo(path30);
if (ver.FileVersion != "3.0.5300.0")
retVal = false;
}
else
retVal = false;
if (File.Exists(path35))
{
FileVersionInfo ver = FileVersionInfo.GetVersionInfo(path35);
if (ver.FileVersion != "3.5.5386.0")
retVal = false;
}
else
retVal = false;
return retVal;
}
private void DoMobileCopy()
{
this.Cursor = Cursors.WaitCursor;
//Get ref to the source database being copied
Database sourceDb = SourceServer.Databases[ddlCatalog.Text];
bool doCopy = true;
//Create the Output SDF file
SetStatus("Checking output path...");
if (File.Exists(tbDestPath.Text))
{
if (MessageBox.Show(this, "A file with that name already exist! Are you sure you want to overwrite this file?", "File already exist!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
{
File.Delete(tbDestPath.Text);
}
else
doCopy = false;
}
if (doCopy)
{
bool copiedFailed = false;
string mobileConnStr = "Data Source='{0}';LCID={1};Password={2};Encrypt={3};";
mobileConnStr = String.Format(mobileConnStr, tbDestPath.Text, tbMobileDestLogin.Text, tbMobileDestPassword.Text, cbEncryptDb.Checked.ToString().ToUpper());
string assemblyPath = "";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -