sqlceの新機能です。私はこれに気づき、同様の質問のためにstackoverflowを検索するために2日間過ごしました。 sqlceを使用して1つのsdfデータベースから別のsdfデータベースにテーブル(スキーマとデータのみ)をコピーする方法を教えてください。 sqlceの主要な用語は何ですか?どんなアドバイスもありがとうございます。sql ceを使用してC#のあるデータベースから別のデータベースにsdfテーブルをコピーします。
0
A
答えて
0
を1つのSDFファイルからスクリプトへのVisual Studio(またはコマンドライン)にスキーマとテーブルを私のSQL Server Compactのツールボックスを使用しても他の自衛隊のファイルに対してスクリプトを実行することができますwith:SQL Serverコンパクトナゲットが必要
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.SqlServerCe;
namespace ConsoleApp5 {
class Program {
static void Main(string[] args) {
string tableName = "ZTVC_MF_S_VALCHA";
string sourceString = "Data Source = C:\\Users\\David\\source\\repos\\ConsoleApp5\\ConsoleApp5\\bin\\Debug\\XXX.sdf";
string destString = "Data Source = C:\\Users\\David\\source\\repos\\ConsoleApp5\\ConsoleApp5\\bin\\Debug\\YYY.sdf";
using (SqlCeConnection sourceConn = new SqlCeConnection()) {
SqlCeCommand sourceCmd = sourceConn.CreateCommand();
sourceCmd.CommandType = CommandType.Text;
sourceCmd.Parameters.AddWithValue("tableName", tableName);
sourceConn.ConnectionString = sourceString;
sourceConn.Open();
using (SqlCeConnection destConn = new SqlCeConnection()) {
destConn.ConnectionString = destString;
destConn.Open();
DoesTableExist(tableName, destConn);
DataTable dt=GetDataFromTable(tableName, sourceConn);
CopyTableSchema(tableName, dt, destConn);
FillTableCopy(tableName, dt, destConn);
DeleteTable(tableName, destConn);
Console.ReadKey();
}
}
}
private static void FillTableCopy( string tabName, DataTable dt, SqlCeConnection destConn) {
List<string> dTypesList = new List<string>();
int dTypesListIndexCounter = 0;
string sqlCmd = "";
foreach (DataRow row in dt.Rows) {
sqlCmd = "INSERT INTO " + tabName + "(";
int colHeadCounter = 0;
int colHeadLast = dt.Columns.Count;
foreach (DataColumn colHead in dt.Columns) {
string dType = colHead.DataType.ToString().ToLower().Substring(7);
dTypesList.Add(dType);
if (++colHeadCounter == colHeadLast) {
sqlCmd += colHead + " ";
}
else {
sqlCmd += colHead + ", ";
}
}
sqlCmd += ") VALUES(";
//Console.Write(sqlCmd);
colHeadCounter = 0;
colHeadLast = row.ItemArray.Length;
foreach (var item in row.ItemArray) {
var temp = item.ToString();
if (temp.Count() == 0) {
if (++colHeadCounter == colHeadLast) {
sqlCmd += ("null ");
}else {
sqlCmd += ("null, ");
}
}else if (dTypesList[dTypesListIndexCounter] == "string"
|| dTypesList[dTypesListIndexCounter] == "char"
|| dTypesList[dTypesListIndexCounter] == "datetime"
|| dTypesList[dTypesListIndexCounter] == "single"
|| dTypesList[dTypesListIndexCounter] == "guid") {
if (++colHeadCounter == colHeadLast) {
sqlCmd += ("'" + item + "' ");
}else {
sqlCmd += ("'" + item + "', ");
}
}else {
if (++colHeadCounter == colHeadLast) {
sqlCmd += (item + " ");
}else {
sqlCmd += (item + ", ");
}
}
dTypesListIndexCounter++;
}
sqlCmd += ")";
//Console.Write(sqlCmd);
//Console.WriteLine();
SqlCeCommand cmd = new SqlCeCommand(sqlCmd, destConn);
cmd.ExecuteNonQuery();
}
//Console.WriteLine(cmd);
Console.WriteLine("Data copy executed.");
}
private static void DeleteTable(string tableName, SqlCeConnection pathConn) {
string sqlCmd = "DROP TABLE " + tableName;
SqlCeCommand cmd = new SqlCeCommand(sqlCmd, pathConn);
cmd.ExecuteNonQuery();
Console.WriteLine(tableName + " deleted.");
}
private static void CopyTableSchema(string tableName, DataTable dt, SqlCeConnection destConn) {
string sqlCmd = "Create table " + tableName + "(";
int colHeadCounter = 0;
int colHeadLast = dt.Columns.Count;
/*sqlce supported types: bigint, integer,smallint,tinyint,bit,numeric, money, float, real, datetime,
* national character, national character varying, ntext, nchar, binary,varbinary, image, uniqueidentifier,
* identity, rowguidcol, timestamp/rowversion */
foreach (DataColumn colHead in dt.Columns) {
string dType = colHead.DataType.ToString().ToLower().Substring(7);
////still needs all type conversions mapped
if (dType == "int16") {
dType = "smallint";
}
else if (dType == "int32") {
dType = "int";
}
else if (dType == "int64") {
dType = "bigint";
}
else if (dType == "string") {
dType = "nvarchar(4000)";
}
else if (dType == "boolean") {
dType = "bit";
}
else if (dType == "byte") {
dType = "tinyint";
}
else if (dType == "byte[]") {
dType = "binary";
}
else if (dType == "char") {
dType = "nchar";
}
else if (dType == "datetime") {
dType = "datetime";
}
else if (dType == "decimal") {
dType = "money";
}
else if (dType == "double") {
dType = "float";
}
else if (dType == "sbyte") {
dType = "tinyint";
}
else if (dType == "single") {
dType = "real";
}
else if (dType == "guid") {
dType = "uniqueidentifier";
}
else {
Console.WriteLine();
Console.WriteLine("Add new type to type conversion");
Console.ReadKey();
Environment.Exit(0);
}
if (++colHeadCounter == colHeadLast) {
sqlCmd += colHead + " " + dType;
}
else {
sqlCmd += colHead + " " + dType + ", ";
}
}
sqlCmd += ")";
//Console.WriteLine(sqlCmd);
SqlCeCommand cmd = new SqlCeCommand(sqlCmd, destConn);
cmd.ExecuteNonQuery();
Console.WriteLine("Copy of " + tableName + " created.");
}
private static DataTable GetDataFromTable(string tableName, SqlCeConnection sourceConn) {
SqlCeCommand sourceCmd = sourceConn.CreateCommand();
sourceCmd.CommandText = "Select * from " + tableName;
SqlCeDataAdapter sourceAdp = new SqlCeDataAdapter(sourceCmd);
DataTable dt = new DataTable();
sourceAdp.Fill(dt);
//Console.WriteLine("The SqlCeDataAdapter succesfully filled " + dt.Rows.Count + " rows in the DataSet!");
return dt;
}
private static bool DoesTableExist(string tableName, SqlCeConnection destConn) {
bool doesIt = false;
SqlCeCommand destCmd = destConn.CreateCommand();
destCmd.CommandType = CommandType.Text;
destCmd.CommandType = CommandType.Text;
destCmd.CommandText = "SELECT 1 FROM Information_Schema.Tables WHERE TABLE_NAME = @tableName";
destCmd.Parameters.AddWithValue("tableName", tableName);
object result = destCmd.ExecuteScalar();
if (result != null) {
doesIt = true;
}
return doesIt;
}
}
}
+0
私は戻って、データム文字列のシングルクォートを処理するコードを追加しなければなりませんでした – AlanAxis
0
あなたは、これは私が思いついたものです
関連する問題
- 1. あるデータベースから別のデータベースにテーブルをコピーするには?
- 2. MySQLのあるデータベースから別のデータベースにすべてのテーブルをコピーする
- 3. あるデータベースから別のデータベースにテーブルをコピーする
- 4. TOAD for Oracleを使用してあるデータベースから別のデータベースにパッケージをコピー
- 5. SQL Server CEの.sdfファイルをコピー
- 6. あるデータベース/テーブルから別のデータベース/テーブルにデータをコピーする方法
- 7. OracleDataAdapter.InsertCommandを使用してvb.NETアプリケーションから1つのデータベースのテーブルの内容を別のデータベースにコピーする
- 8. SQL Server CEデータベース間のテーブル行をコピーする
- 9. データベースから別のデータベースにデータをコピー
- 10. mysqlデータベースのテーブルからSQL-SERVER 2008データベースにレコードをコピーしますか?
- 11. OLTP SQL Serverデータベースから別のレポートSQL Serverデータベースにテーブルをレプリケート/コピーしますか?
- 12. Mysqlあるデータベースから別のデータベースにシリアル化されたテーブルをコピー
- 13. Oracle:あるデータベースから別のデータベースにロールをコピーしますか?
- 14. Sql Server CE 3.5 sdfデータベースをSql Server CE 4.0にアップグレードするにはどうすればよいですか?
- 15. SQL:あるデータベースのレコードを別のデータベースに自動的にコピー
- 16. Django:あるデータベースから別のデータベースにデータをコピーする
- 17. あるデータベースのテーブルを別のデータベースにコピー
- 18. Mysqlはあるデータベースから別のデータベースにデータをコピーします。
- 19. ローカルSQLデータベースからAzure SQLデータベースにテーブルをコピー
- 20. SQL Server 2008 R2 - ストアドプロシージャをあるデータベースから別のデータベースにプログラムでコピー
- 21. .sdfデータベースを.mdfデータベースに変換する
- 22. 1つのデータベースから別のデータベースにOracleのテーブルをコピーする方法
- 23. スカラー関数をあるデータベースから別のデータベースにコピー
- 24. あるデータベースから別のデータベースにテーブル構造をコピーする方法は? 1つのデータベースからテーブル構造をコピーする方法を
- 25. SQLiteはシェルスクリプトを使用して1つのデータベースから別のデータベースにデータをコピーします
- 26. あるデータベースから別のデータベースにSQL Serverデータをエクスポートする
- 27. SQLConnectionを使用してSQL CEデータベースに接続
- 28. データベースを別のデータベースにコピーする
- 29. SQL Server - あるサーバーのテーブルデータをAzure SQLデータベースのテーブルにコピー
- 30. Entity Frameworkを使用してSQL Server CE(.SDFファイル)に接続する
テーブルのCREATEクエリを使用してターゲットDBに格納する必要があります。同様に、レコードをターゲットDBにコピーするためのソーステーブルのループ – shahsani