返回首页

{S0}更新
请下载此工具的最新版本{A}。我有一些用户反馈的基础上更新此实用工具。
我补充的能力,选择您要复制的模式。对于大多数数据库,这将只是quot; dboquot;
我修正了一个错误的应用程序不承认有效版本的quot; System.Data.SqlServerCe.dllquot;简介
此实用程序将复制从一个普通的SQL Server 2000/2005数据库的架构和数据,并出口到SQL Server Compact Edition数据库。该工具支持3.1版或SQL Server精简版3.5。背景
我是一个移动应用程序和工作需要一个简单的方法来管理,而不必诉诸脚本的表关系和索引。我熟悉使用SQL Server Management Studio中,所以我决定,我会写一个实用工具,转换成一个普通的SQL Server数据库移动数据库。这样,我可以继续使用的工具,我通常用它来创建和维护数据库。使用代码
随意采取在看代码,并提供您最亲切的意见。应用程序使用一个向导穿行转换数据库。我也正常的WinForm转换,但我停下来代替此向导的发展,这样的形式是不完整的的。我将保持此代码,在我的博客写在关于它的更多。兴趣点
此实用程序将复制索引,主键,外键,表结构和数据。 SQL Server精简版不支持视图,触发器,也不存储过程,因此,此实用程序不会复制这些。历史1.0初始版本

回答

评论会员:脚注 时间:2011/12/16
随着早期提意见建议的一些变化,这使得建立一个自动化工具,节省了很多时间。感谢
评论会员:!jcgk_77 时间:2011/12/16
伟大纲领
评论会员:会员7805809 时间:2011/12/16
HI

我只想补充新的版本号,使这一方案能够支持SQL Server精简版V3.5 SP2。

只需打开SQLToSQLCompactCopy源\对话框\ SelectMobileAssembliesDialog.cs,并取代目前的"Check35version()"功能与

私人BOOL Check35version(字符串路径)
&# 160; {
(String.IsNullOrEmpty(路径))
  ;
返回false;
FileVersionInfo VER = FileVersionInfo.GetVersionInfo(路径)
 0; (ver.FileVersion =="3.5.8080.0")
{
_Ver35Valid = TRUE;
 0;
返回true; &# 160; }
ELSE
{
&# 160; _Ver35Valid = FALSE;
 0;
返回false; }
}
评论会员:psnlakshmi 时间:2011/12/16
johnnycantcode.com似乎没有内容... ...网站上的任何地方... ...

为什么解决方案的参考项目GLT.Common和GLT.Licensing不包括在内,不出现需要
评论会员:?pgarbo 时间:2011/12/16
您好

我试图复制一个SQL Server 2005数据库到SQL精简DB使用这个工具,一切顺利,但是当我做最后一步,我得到这个错误

See the end of this message for details 

 

on invoking 

just-in-time (JIT) debugging instead of 

 

this dialog box.

 

************** Exception Text 

 

**************

System.Reflection.TargetInvocationExcept

 

ion: Exception has been thrown by the 

target of an invocation. ---> 

 

System.ArgumentException: Invalid value 

for key 'locale identifier'.  ---> 

 

System.FormatException: Input string was 

not in a correct format.

   at 

 

System.Number.StringToNumber(String str, 

 

NumberStyles options, NumberBuffer& 

 

number, NumberFormatInfo info, Boolean 

 

parseDecimal)

   at System.Number.ParseInt32(String s, 

 

NumberStyles style, NumberFormatInfo 

info)

   at 

 

System.Data.SqlServerCe.ConStringUtil.Se

 

tIntType(String value, String key)

   --- End of inner exception stack 

 

trace ---

   at 

System.Data.SqlServerCe.ConStringUtil.Se

 

tIntType(String value, String key)

   at 

 

System.Data.SqlServerCe.ConStringUtil.Se

tLocale(Hashtable table)

   at 

 

System.Data.SqlServerCe.ConStringUtil.Ve

rifyValues(Hashtable values)

   at 

 

System.Data.SqlServerCe.ConStringUtil.Pa

rseConnectionString(String& 

 

connectionString)

   at 

System.Data.SqlServerCe.SqlCeEngine.set_

 

LocalConnectionString(String value)

   at 

 

System.Data.SqlServerCe.SqlCeEngine..cto

 

r(String connectionString)

   --- End of inner exception stack 

 

trace ---

   at 

System.RuntimeMethodHandle._InvokeConstr

 

uctor(Object[] args, SignatureStruct& 

 

signature, IntPtr declaringType)

   at 

 

System.RuntimeMethodHandle.InvokeConstru

ctor(Object[] args, SignatureStruct 

 

signature, RuntimeTypeHandle 

declaringType)

   at 

 

System.Reflection.RuntimeConstructorInfo

 

.Invoke(BindingFlags invokeAttr, Binder 

 

binder, Object[] parameters, CultureInfo 

culture)

   at 

 

System.RuntimeType.CreateInstanceImpl(Bi

 

ndingFlags bindingAttr, Binder binder, 

Object[] args, CultureInfo culture, 

 

Object[] activationAttributes)

   at 

System.Activator.CreateInstance(Type 

 

type, BindingFlags bindingAttr, Binder 

binder, Object[] args, CultureInfo 

 

culture, Object[] activationAttributes)

   at GLT.SqlCopy.WizardForm.DoCopy()

   at 

 

GLT.SqlCopy.WizardForm.UpdateWizard()

   at 

 

GLT.SqlCopy.WizardForm.btnNext_Click(Obj

ect sender, EventArgs e)

   at 

 

System.Windows.Forms.Control.OnClick(Eve

ntArgs e)

   at 

 

System.Windows.Forms.Button.OnClick(Even

tArgs e)

   at 

 

System.Windows.Forms.Button.OnMouseUp(Mo

useEventArgs mevent)

   at 

 

System.Windows.Forms.Control.WmMouseUp(M

 

essage& m, MouseButtons button, Int32 

clicks)

   at 

 

System.Windows.Forms.Control.WndProc(Mes

sage& m)

   at 

 

System.Windows.Forms.ButtonBase.WndProc(

Message& m)

   at 

 

System.Windows.Forms.Button.WndProc(Mess

age& m)

   at 

 

System.Windows.Forms.Control.ControlNati

 

veWindow.OnMessage(Message& m)

   at 

 

System.Windows.Forms.Control.ControlNati

 

veWindow.WndProc(Message& m)

   at 

 

System.Windows.Forms.NativeWindow.Callba

ck(IntPtr hWnd, Int32 msg, IntPtr 

 

wparam, IntPtr lparam)

 



************** Loaded Assemblies 

 

**************

mscorlib

    Assembly Version: 2.0.0.0

    Win32 Version: 2.0.50727.1433 

 

(REDBITS.050727-1400)

    CodeBase: 

file:///C:/WINDOWS/Microsoft.NET/Framewo



rk/v2.0.50727/mscorlib.dll

----------------------------------------

GLT.SqlCopy

    Assembly Version: 1.0.0.0

    Win32 Version: 1.0.0.0

    CodeBase: 

 

file:///C:/Documents%20and%20Settings/la



xmi/Desktop/SQL2005%20express%20ToSQLCom

 

pact%20Convert/GLT.SqlCopy.exe

----------------------------------------

System.Windows.Forms

    Assembly Version: 2.0.0.0

    Win32 Version: 2.0.50727.1433 

 

(REDBITS.050727-1400)

    CodeBase: 

file:///C:/WINDOWS/assembly/GAC_MSIL/Sys



tem.Windows.Forms/2.0.0.0__b77a5c561934e

 

089/System.Windows.Forms.dll

----------------------------------------

System

    Assembly Version: 2.0.0.0

    Win32 Version: 2.0.50727.1433 

 

(REDBITS.050727-1400)

    CodeBase: 

file:///C:/WINDOWS/assembly/GAC_MSIL/Sys



tem/2.0.0.0__b77a5c561934e089/System.dll

----------------------------------------

System.Drawing

    Assembly Version: 2.0.0.0

    Win32 Version: 2.0.50727.1433 

 

(REDBITS.050727-1400)

    CodeBase: 

file:///C:/WINDOWS/assembly/GAC_MSIL/Sys



tem.Drawing/2.0.0.0__b03f5f7f11d50a3a/Sy

 

stem.Drawing.dll

----------------------------------------

Accessibility

    Assembly Version: 2.0.0.0

    Win32 Version: 2.0.50727.1433 

 

(REDBITS.050727-1400)

    CodeBase: 

file:///C:/WINDOWS/assembly/GAC_MSIL/Acc



essibility/2.0.0.0__b03f5f7f11d50a3a/Acc

 

essibility.dll

----------------------------------------

System.Configuration

    Assembly Version: 2.0.0.0

    Win32 Version: 2.0.50727.1433 

 

(REDBITS.050727-1400)

    CodeBase: 

file:///C:/WINDOWS/assembly/GAC_MSIL/Sys



tem.Configuration/2.0.0.0__b03f5f7f11d50

 

a3a/System.Configuration.dll

----------------------------------------

System.Xml

    Assembly Version: 2.0.0.0

    Win32 Version: 2.0.50727.1433 

 

(REDBITS.050727-1400)

    CodeBase: 

file:///C:/WINDOWS/assembly/GAC_MSIL/Sys



tem.Xml/2.0.0.0__b77a5c561934e089/System

 

.Xml.dll

----------------------------------------

Microsoft.SqlServer.Smo

    Assembly Version: 9.0.242.0

    Win32 Version: 9.00.4035.00

    CodeBase: 

 

file:///C:/WINDOWS/assembly/GAC_MSIL/Mic



rosoft.SqlServer.Smo/9.0.242.0__89845dcd

 

8080cc91/Microsoft.SqlServer.Smo.dll

----------------------------------------

Microsoft.SqlServer.ConnectionInfo

    Assembly Version: 9.0.242.0

    Win32 Version: 9.00.4035.00

    CodeBase: 

 

file:///C:/WINDOWS/assembly/GAC_MSIL/Mic



rosoft.SqlServer.ConnectionInfo/9.0.242.

 

0__89845dcd8080cc91/Microsoft.SqlServer.

 

ConnectionInfo.dll

----------------------------------------

System.Data

    Assembly Version: 2.0.0.0

    Win32 Version: 2.0.50727.1433 

 

(REDBITS.050727-1400)

    CodeBase: 

file:///C:/WINDOWS/assembly/GAC_32/Syste



m.Data/2.0.0.0__b77a5c561934e089/System.

 

Data.dll

----------------------------------------

Microsoft.SqlServer.SmoEnum

    Assembly Version: 9.0.242.0

    Win32 Version: 9.00.4035.00

    CodeBase: 

 

file:///C:/WINDOWS/assembly/GAC_MSIL/Mic



rosoft.SqlServer.SmoEnum/9.0.242.0__8984

 

5dcd8080cc91/Microsoft.SqlServer.SmoEnum

 

.dll

----------------------------------------

System.Transactions

    Assembly Version: 2.0.0.0

    Win32 Version: 2.0.50727.1433 

 

(REDBITS.050727-1400)

    CodeBase: 

file:///C:/WINDOWS/assembly/GAC_32/Syste



m.Transactions/2.0.0.0__b77a5c561934e089

 

/System.Transactions.dll

----------------------------------------

System.EnterpriseServices

    Assembly Version: 2.0.0.0

    Win32 Version: 2.0.50727.1433 

 

(REDBITS.050727-1400)

    CodeBase: 

file:///C:/WINDOWS/assembly/GAC_32/Syste



m.EnterpriseServices/2.0.0.0__b03f5f7f11

 

d50a3a/System.EnterpriseServices.dll

----------------------------------------

Microsoft.SqlServer.SqlEnum

    Assembly Version: 9.0.242.0

    Win32 Version: 9.00.4035.00

    CodeBase: 

 

file:///C:/WINDOWS/assembly/GAC_MSIL/Mic



rosoft.SqlServer.SqlEnum/9.0.242.0__8984

 

5dcd8080cc91/Microsoft.SqlServer.SqlEnum

 

.dll

----------------------------------------

Microsoft.SqlServer.BatchParser

    Assembly Version: 9.0.242.0

    Win32 Version: 2005.090.4035.00

    CodeBase: 

 

file:///C:/WINDOWS/assembly/GAC_32/Micro



soft.SqlServer.BatchParser/9.0.242.0__89

 

845dcd8080cc91/Microsoft.SqlServer.Batch

 

Parser.dll

----------------------------------------

System.Data.SqlServerCe

    Assembly Version: 9.0.242.0

    Win32 Version: 3.0.5300.0

    CodeBase: 

 

file:///C:/WINDOWS/assembly/GAC_MSIL/Sys



tem.Data.SqlServerCe/9.0.242.0__89845dcd

 

8080cc91/System.Data.SqlServerCe.dll

----------------------------------------

 

************** JIT Debugging 

 

**************

To enable just-in-time (JIT) debugging, 

 

the .config file for this

application or computer (machine.config) 

 

must have the

jitDebugging value set in the 

 

system.windows.forms section.

The application must also be compiled 

 

with debugging

enabled.

 

For example:

 

<configuration>

    <system.windows.forms 

 

jitDebugging="true" />

</configuration>

 

When JIT debugging is enabled, any 

 

unhandled exception

will be sent to the JIT debugger 

 

registered on the computer

rather than be handled by this dialog 

box.


帮助我的身体?
注:我downlod
SQLToSQLCompactCopy.zip
评论会员:UrosCalakovic 时间:2011/12/16
您好

伟大的工具,如果我能得到它的工作... ...

我得到以下exeption抛出时,它会尝试创建数据库:

无法加载文件或程序集"文件:/ / / C:\ PROGRAM FILES \ Microsoft SQL Server的精简版\ V3.5 \ sqlcecompact35.dll"或它的一个依赖。该模块包含一个程序集清单。

我一个Vista家用机上运行,​​它与Visual Studio 2008亲。我的SQL Express 2005和SQL CE 3.5 SP2

希望你能帮助!

提前许多感谢。
伊恩{S2}
评论会员:EdgarVegaD 时间:2011/12/16
varbinary列有一个小问题。创建它们的长度为1。简单的改变在wizardForm.cs @ 472修复了这个问题:

{C}
总之,软件是伟大的!谢谢,约翰尼!BR}嘉宝
评论会员:EdgarVegaD 时间:2011/12/16
伟大的工作,感谢
一个子轴承需要9个月,无论
有多少妇女分配
评论会员:。dille4 时间:2011/12/16
您好

我试图复制SQL Server数据库使用SQL Server SQL精简版数据库复制到SQL紧凑型数据库,一切顺利,但是当我做最后一步(完成)我得到一个错误,说:

System.Reflection.TargetInvocationException:异常被抛出调用的目标。 --- GT; System.ArgumentException:关键的区域设置标识符"的值无效。 ---> System.FormatException:输入字符串是不正确的格式

"总结回顾"窗口显示我的连接字符串:

SQL Server精简版的连接字符串:
数据源="C:\'; LCID = myuser,密码=输入mypassword加密= FALSE; SSCE:最大的数据库大小= 4091

为了补充信息,源数据库不在本地。

任何想法
评论会员:?kshakir 时间:2011/12/16
好吧,我决定不写使用的ID,现在说:

"你没有权限保存文件到C:\请选择不同的目标路径,然后再试一次"

发生这种情况的任何路径尝试。

关于
评论会员:khanricksteele 时间:2011/12/16
您好,

我用SQL契约以前,我从来没有使用"用户"属性。目前的代码是寻找一个区域设置标识符(LCID)一个四位数的国家代码:

CultureInfo的myCIintl =新的CultureInfo("EN - AU",FALSE)(myCIintl.LCID);()

所有这一切都与连接字符串无关。更改字符串:

字符串mobileConnStr ="数据源="{0}",坚持安全信息= TRUE;密码= {2};加密= {3}; SSCE:最大数据库大小= 4091;";

在文件OutputCtrl.cs(控制文件夹中找到)


评论会员:会员1871253 时间:2011/12/16
喜约翰​​尼,

您已经创建了很好的工具。
这当然填补缺乏的MS叶和避免手动脚本。我注意到两件事引起的小问题:如果在SQL Server中的一列GETUTCDATE()作为默认值,有一个问题,因为CE不具备此功能
。所以,我已经解决了在WizardForm.cs下一行加入 - DoCopy():

                        if (col.DefaultConstraint != null && !String.IsNullOrEmpty(col.DefaultConstraint.Text))

                        {

                            // SQL Server CE 3.5 does not support function GETUTCDATE()

                            col.DefaultConstraint.Text = col.DefaultConstraint.Text.Replace("(getutcdate())", "(getdate())");

                            string def = col.DefaultConstraint.Text.Replace("((", "(").Replace("))", ")");

 

                            sb.Append(" DEFAULT ").Append(col.DefaultConstraint.Text);

                            //sb.Append(" DEFAULT (1) ");

                        }
我遇到的第二件事情上多列键的ForeignKey脚本创建的。只有第一次被引用的列包括有一个方括号中的问题。

                                    // Check If Multi-Column Key's => Iterate Keys

                                    string createFKSql = String.Empty;

                                    if (sourceDb.Tables[fk.ReferencedTable].Indexes[fk.ReferencedKey].IndexedColumns.Count == 1)

                                    {

                                        // Single PK so use the original string

                                        createFKSql = String.Format(fkSql, tbl.Name, fk.Name, "{0}", fk.ReferencedTable, sourceDb.Tables[fk.ReferencedTable].Indexes[fk.ReferencedKey].IndexedColumns[0].Name);

                                    }

                                    else if (sourceDb.Tables[fk.ReferencedTable].Indexes[fk.ReferencedKey].IndexedColumns.Count > 1)

                                    {

                                        // Multi-Column PK

                                        createFKSql = String.Format(fkSql, tbl.Name, fk.Name, "{0}", fk.ReferencedTable, "{1}");

                                        string referencedColumns = String.Empty;

                                        foreach(IndexedColumn iCol in sourceDb.Tables[fk.ReferencedTable].Indexes[fk.ReferencedKey].IndexedColumns)

                                        {

                                            // Separate Columns including the square brackets

                                            // to identify each referenced column.

                                            if (referencedColumns.Length > 0)

                                                referencedColumns = referencedColumns + "], [";

 

                                            referencedColumns = referencedColumns + iCol.Name;

                                        }

                                        createFKSql = String.Format(createFKSql, "{0}", referencedColumns);

                                    }

                               

                                    StringBuilder sbFk = new StringBuilder();

                                    foreach (ForeignKeyColumn col in fk.Columns)

                                    {

                                        // Added square brackets to identify each column.

                                        if (sbFk.Length > 0)

                                            sbFk.Append("], [");

 

                                        sbFk.Append(col.Name);

                                    }

但是,正如我说:一个伟大的工具只有轻微的问题{S2}
对不起,如果我不使用这些片段上的'最好'的编码实践,但我不是一个C#,但VB.Net开发。

亲切的问候,

迈克尔
评论会员:会员2651573 时间:2011/12/16
对于其他SQL Server CE 3.5 SP1的人,我能得到它的工作SelectMobileAssembliesDialog.cs行98修改为:


            if (ver.FileMajorPart == 3 && ver.FileMinorPart == 5)


此外,我遇到了一些FinishCtrl.cs试图更新的行数的基础上的进度条问题。由于我只使用一个POC,我没有对它进行调试(我认为我的数据{S4}的,而不是砍死线58安培; 59说:


            progressBar1.Maximum = Math.Max( value, max );

            progressBar1.Value = Math.Min( value, max );


其他比它很好工作!非常非常谢谢你开发这个工具,并为释放源社区
评论会员:。voellinger 时间:2011/12/16
似乎很抛光,但我在家里使用SQL 2008 Express的。 ?塞斯
评论会员:游客 时间:2011/12/16
|:我有这个错误whiloe,要升级的数据库任何机会尽快加入为支持"指定的数据类型是无效的。[数据类型(如果已知)=时间戳]"请帮我
Tajniak5
评论会员:游客 时间:2011/12/16
您好,SQLCE不这里有一个timestamp类型,所以没有"明显的"映射。你可以试试地图时间戳二进制(8),但新行不会有新的时间戳。你做你的代码中手动与SQLCE。弗朗索瓦YACOB
。zivzuv
评论会员:游客 时间:2011/12/16
海兰,IST这个工具很好,但我有一个与primery键的问题。在我所有的表是一个带有ID科拉姆。此ID是primerykey此表。如果我进口的ID都减1。有任何人对我的解决方案
?mape1082
评论会员:游客 时间:2011/12/16
我试图复制一个2GB的文件到SQLServerCompact。该计划不断报告"内存不足"异常。有一个大视场(ntext类型),该文件最初是一个备注字段被转换到SQLServerExpress2008的Access数据库。计划似乎除了这个问题。任何建议,将不胜感激
。弗朗索瓦YACOB
评论会员:游客 时间:2011/12/16
喜这个工具真是太棒了,我只是发现了它不与NVARCHAR(MAX)列。为了使其有效,你需要增加一个WizardForm.cs可以像(我的作品)的情况下:codepreforeach(Columncolspanclass="code-keyword"in/spantbl.Columns){spanclass="code-keyword"if/span(colIdx>spanclass="code-digit"0/span)sb.Append(spanclass="code-string""/spanspanclass="code-string","/span); sb.Append(spanclass="code-string""/spanspanclass="code-string"["/span).Append(col.Name).Append(spanclass="code-string""/spanspanclass="code-string"]"/span).Append(spanclass="code-string""/spanspanclass="code-string""/span);spanclass="code-keyword"int/spanmax=spanclass="code-digit"0/span;spanclass="code-keyword"switch/span(col.DataType.SqlDataType){bspanclass="code-keyword"case/spanSqlDataType.NVarCharMax:max=spanclass="code-digit"4000/span;col.DataType=spanclass="code-keyword"new/spanDataType(SqlDataType.NVarChar);col.DataType.MaximumLength=max;spanclass="code-keyword"break/span;/b/pre/code我知道,在SQLServerCompact3.5nvarchar数据类型的最大值是4000,所以我将它设置该值,我不肯定有关的其他版本。无论如何,再次感谢这个伟大的工具
!sholliday
评论会员:!!!!!!!!!!{BR} 时间:2011/12/16
mape1082
评论会员:游客 时间:2011/12/16
我是从CEDB生成ADO实体模型的问题与此产生优秀的工具:"错误6003:与身份的'ID'的项目已经存在的元数据集合。"我做了以下变化:WizardForm532行 sb.Append("ALTERTABLE"。)追加(tbl.Name)追加("]ADDCONSTRAINTPK_"); sb.Append("ALTERTABLE"。)附加(tbl.Name)追加("]ADDCONSTRAINTPK_"tbl.Name);现在它的伟大工程{五}感谢
!弗朗索瓦YACOB
评论会员:游客 时间:2011/12/16
感谢您的修改,它帮助了我很多东西!当然,在你的补丁,我们可以注释下面的循环:sb.Append("ALTERTABLE"。)附加(tbl.Name)追加("]ADDCONSTRAINTPK_"tbl.Name);//创建约束的名称/*弗朗索瓦:不需要追加主字段的名字约束!为(intk=0时,KLT;pKeys.CountK){(K0) sb.Append("_");{BR} sb.Append(pKeys[K])}*/最好的问候,弗朗索瓦