介绍
本文将为大家详细讲解如何利用C#语言实现数据库的复制,即将A数据库数据转移到B数据库中。
步骤
1.创建控制台程序
首先,我们需要创建一个控制台应用程序,命名为“CopyDatabase”。
2.引入相关命名空间
在编写代码之前,我们需要引入一些命名空间,包括System.Data.SqlClient和System.Configuration。
using System.Data.SqlClient;
using System.Configuration;
3.获取源数据库连接字符串和目标数据库连接字符串
在App.config文件中创建两个连接字符串,分别对应源数据库和目标数据库,例如:
<connectionStrings>
<add name="SourceConnectionString"
connectionString="Server=localhost;Database=SourceDatabase;Integrated Security=true;" />
<add name="TargetConnectionString"
connectionString="Server=localhost;Database=TargetDatabase;Integrated Security=true;" />
</connectionStrings>
然后在代码中通过下面的方式获取连接字符串:
var sourceConnectionString = ConfigurationManager.ConnectionStrings["SourceConnectionString"].ConnectionString;
var targetConnectionString = ConfigurationManager.ConnectionStrings["TargetConnectionString"].ConnectionString;
4.连接数据库
使用SqlConnection类连接到源数据库和目标数据库:
using (var sourceConnection = new SqlConnection(sourceConnectionString))
using (var targetConnection = new SqlConnection(targetConnectionString))
{
sourceConnection.Open();
targetConnection.Open();
// 复制数据库
}
5.复制数据库
在连接到源数据库和目标数据库后,我们可以使用SqlCommand和SqlDataReader类读取源数据库中的数据,并将其插入到目标数据库中。
下面是一个示例,演示如何复制一个叫做“Customers”的表:
using (var sourceCommand = new SqlCommand("SELECT * FROM Customers", sourceConnection))
using (var reader = sourceCommand.ExecuteReader())
using (var targetCommand = new SqlCommand())
{
targetCommand.Connection = targetConnection;
targetCommand.CommandTimeout = 60;
targetCommand.CommandType = CommandType.Text;
// 设置插入操作
targetCommand.CommandText = "INSERT INTO Customers (Name, Age) VALUES (@Name, @Age)";
targetCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50);
targetCommand.Parameters.Add("@Age", SqlDbType.Int);
while (reader.Read())
{
// 设置参数值
targetCommand.Parameters["@Name"].Value = reader.GetString(reader.GetOrdinal("Name"));
targetCommand.Parameters["@Age"].Value = reader.GetInt32(reader.GetOrdinal("Age"));
// 执行插入操作
targetCommand.ExecuteNonQuery();
}
}
在上面的代码中,我们首先定义了一个SELECT语句来读取“Customers”表的所有数据。然后我们使用SqlCommand和SqlDataReader类来执行查询操作并读取返回结果。接着,我们定义了一个INSERT语句来插入数据到目标数据库的“Customers”表中,并使用SqlCommand的参数功能设置参数值。最后,我们使用targetCommand.ExecuteNonQuery()方法来执行插入操作。
6.完整示例
using System.Data.SqlClient;
using System.Configuration;
namespace CopyDatabase
{
class Program
{
static void Main(string[] args)
{
var sourceConnectionString = ConfigurationManager.ConnectionStrings["SourceConnectionString"].ConnectionString;
var targetConnectionString = ConfigurationManager.ConnectionStrings["TargetConnectionString"].ConnectionString;
using (var sourceConnection = new SqlConnection(sourceConnectionString))
using (var targetConnection = new SqlConnection(targetConnectionString))
{
sourceConnection.Open();
targetConnection.Open();
using (var sourceCommand = new SqlCommand("SELECT * FROM Customers", sourceConnection))
using (var reader = sourceCommand.ExecuteReader())
using (var targetCommand = new SqlCommand())
{
targetCommand.Connection = targetConnection;
targetCommand.CommandTimeout = 60;
targetCommand.CommandType = CommandType.Text;
targetCommand.CommandText = "INSERT INTO Customers (Name, Age) VALUES (@Name, @Age)";
targetCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50);
targetCommand.Parameters.Add("@Age", SqlDbType.Int);
while (reader.Read())
{
targetCommand.Parameters["@Name"].Value = reader.GetString(reader.GetOrdinal("Name"));
targetCommand.Parameters["@Age"].Value = reader.GetInt32(reader.GetOrdinal("Age"));
targetCommand.ExecuteNonQuery();
}
}
}
}
}
}
示例说明
示例1
假设我们有一个源数据库名为“SourceDatabase”,包含一张名为“Customers”的表,表中有两个字段:“Name”和“Age”。我们还有一个目标数据库名为“TargetDatabase”,希望将“Customers”表中的所有数据复制到“TargetDatabase”中。
我们可以在CopyDatabase项目的App.config文件中定义两个连接字符串:
<connectionStrings>
<add name="SourceConnectionString"
connectionString="Server=localhost;Database=SourceDatabase;Integrated Security=true;" />
<add name="TargetConnectionString"
connectionString="Server=localhost;Database=TargetDatabase;Integrated Security=true;" />
</connectionStrings>
然后,我们按照上面的步骤编写代码,即可实现数据库复制。
示例2
假设我们有一个源数据库名为“SourceDatabase”,包含一张名为“Products”的表,表中有三个字段:“Id”、“Name”和“Price”。我们还有一个目标数据库名为“TargetDatabase”,希望将“Products”表中的所有数据复制到“TargetDatabase”中。
我们可以使用以下代码实现:
using System.Data.SqlClient;
using System.Configuration;
namespace CopyDatabase
{
class Program
{
static void Main(string[] args)
{
var sourceConnectionString = ConfigurationManager.ConnectionStrings["SourceConnectionString"].ConnectionString;
var targetConnectionString = ConfigurationManager.ConnectionStrings["TargetConnectionString"].ConnectionString;
using (var sourceConnection = new SqlConnection(sourceConnectionString))
using (var targetConnection = new SqlConnection(targetConnectionString))
{
sourceConnection.Open();
targetConnection.Open();
using (var sourceCommand = new SqlCommand("SELECT * FROM Products", sourceConnection))
using (var reader = sourceCommand.ExecuteReader())
using (var targetCommand = new SqlCommand())
{
targetCommand.Connection = targetConnection;
targetCommand.CommandTimeout = 60;
targetCommand.CommandType = CommandType.Text;
targetCommand.CommandText = "INSERT INTO Products (Name, Price) VALUES (@Name, @Price)";
targetCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50);
targetCommand.Parameters.Add("@Price", SqlDbType.Decimal);
while (reader.Read())
{
targetCommand.Parameters["@Name"].Value = reader.GetString(reader.GetOrdinal("Name"));
targetCommand.Parameters["@Price"].Value = reader.GetDecimal(reader.GetOrdinal("Price"));
targetCommand.ExecuteNonQuery();
}
}
}
}
}
}
在上面的示例代码中,我们只需要修改源数据库中的表名和目标数据库中的表名即可实现复制。同时我们还需要修改INSERT语句中的字段名和参数数量以匹配源数据库中的表结构。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现复制数据库 C#将A数据库数据转到B数据库 - Python技术站