SQLite的表和SQLSERVER是一样的
有三个列
CompanyCode
CompanyName
UpdateFlag
Dim ds As DataSet = New DataSet()
Dim sql As String
sql = " Select * from M_Acc_Title where CompanyCode = '" & CompanyCode & "' and UpdateFlag= '" & UpdateFlag& "'"
ds = SQLiteHelper.Query(GlobalCN.LocalCnString, sql)'获取SQLite数据
想将查询出来的结果插入或者更新到服务器上面。
如果,服务器数据库存在相同的CompanyCode ,将相对的CompanyName更新上去,
不存在则插入。
你上面的代码不是拿出了sqlite的数据嘛
你再拿出sqlserver的数据
判断sqlserver中的数据是否存在相同的CompanyCode
如果存在就更新
不存在就新增
dataset里的表,可以批量更新到一个临时表下。然后用merge命令来更新或插入到 目标表就可以了。
merge 目标表
using #临时表 on #临时表.Id = 目标表.Id
when matched then update set Name=#临时表.Name -- 如果Id对上,就更新Name列
when not matched by target then insert (Id, Name) values (#临时表.Id, #临时表.Name) ; -- 如果目标表没有记录则插入
作为测试,建议你在数据库下新建一个表,并写三组数据,用来测试:
create table MyTable
(
Id int primary key,
Name nvarchar(32) null
);
go
insert into MyTable values (1, 'aaaa'), (2, 'bbbb'), (3, 'cccc');
go
新建一个Console项目,贴入以下代码:
using System;
using System.Data.SqlClient;
using System.Data;
class Program
{
static void Main(string[] args)
{
var conStr = @"Data Source=... 这里要写你mssql的连接字符串";
using (var con = new SqlConnection(conStr))
{
con.Open();
// 创建一个临时表
using (var cmd = new SqlCommand(GetSqlCreateTempTable(), con))
{
cmd.ExecuteNonQuery();
}
// 把多行数据导入临时表
using (var table = 假装读Sqlite())
using (var bulkCopy = new SqlBulkCopy(con) { DestinationTableName = "#Temp"})
{
bulkCopy.WriteToServer(table);
}
// 把临时表的数据,合并到目标表下。也就是当Id相同时更新Name,否则插入记录。
using (SqlCommand cmd = new SqlCommand(GetSqlMerge(), con))
{
int rows = cmd.ExecuteNonQuery();
Console.WriteLine("更新或添加,影响记录行:" + rows);
}
}
}
static string GetSqlCreateTempTable()
{
return @"
create table #Temp
(
Id int primary key,
Name nvarchar(32) null
)";
}
static string GetSqlMerge()
{
return @"
merge MyTable
using #Temp on #Temp.Id = MyTable.Id
when matched then update set Name=#Temp.Name
when not matched by target then insert (Id, Name) values (#Temp.Id, #Temp.Name);";
}
static DataTable 假装读Sqlite()
{
var table = new DataTable();
table.Columns.Add("Id", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Rows.Add(1, "1111");
table.Rows.Add(7, "77777");
table.Rows.Add(8, "888888");
table.Rows.Add(9, "9999999");
return table;
}
}
更新前的MyTable
Id Name
-----------
1 aaa
2 bbb
3 ccc
更新数据,导入到#Temp表
Id Name
-----------
1 1111
7 77777
8 888888
9 9999999
更新后的MyTable:
Id Name
-----------
1 1111
2 bbb
3 ccc
7 77777
8 888888
9 9999999
有时候就是脑子转不过来汗。你说的这些我都知道。。就是想不起来怎么搞。例如那个dataset的数据如何小蜜蜂论坛回帖机传进SQlSERVER。。我也想不明白
来源:CSDN
作者:netyou
链接:https://blog.csdn.net/netyou/article/details/104441020