原理很简单 就是把mongodb中的数据提出来 插入sqlsever中
首先要在mongodb中添加mongodb字段和sqlsever字段对应的集合field。
格式:
{
"sqlsever字段" : "name",
"mongodb字段" : "name"
}
MongoClient client;
MongoServer server;
MongoDatabase database;
client = new MongoClient(conStr);
server = client.GetServer();
database = server.GetDatabase(DataConf.DataBaseName);
var data_biaoti = database.GetCollection("field");
var data_biaotiall = data_biaoti.FindAll();
List<string> biaoti = new List<string>();
List<string> nature = new List<string>();
//把字段放入数组中
foreach (var mongodb in data_biaotiall)
{
biaoti.Add(mongodb.AsBsonDocument["mongodb字段"].ToString());
nature.Add(mongodb.AsBsonDocument["sqlsever字段"].ToString());
}
var fill_data = database.GetCollection("mongodb集合");
var fill_dataall = fill_data.FindAll();
SqlConnection conn = new SqlConnection("Data Source=计算机名;Initial Catalog=数据库名;User ID=帐号;Password=密码;");
conn.Open();
//提取mongodb数据
foreach (var fill_ttdoc in fill_dataall)
{
DateTime dt;
List<string> fills_data = new List<string>();
List<string> fills_name = new List<string>();
//把值装入stringlist中
for (int n = 0; n < biaoti.Count(); n++)
{
if (fill_ttdoc.Contains(biaoti[n]))
{
if(biaoti[n]=="时间")
{
dt = ConvertTime(fill_ttdoc.AsBsonDocument[biaoti[n]].ToString());
fills_data.Add(dt.ToString());
}
else
{
fills_data.Add(fill_ttdoc.AsBsonDocument[biaoti[n]].ToString());
}
fills_name.Add(nature[n]);
}
}
string sqlStr = "insert into 表名 (";
//拼接sql---name
for (int n = 0; n < fills_name.Count(); n++)
{
if (n == (fills_name.Count() - 1))
{
sqlStr += fills_name[n].ToString();
}
else
{
sqlStr += fills_name[n].ToString() + ",";
}
}
sqlStr +=") values (";
//拼接sql---data
for (int n = 0; n < fills_data.Count(); n++)
{
if (n == (fills_data.Count() - 1))
{
sqlStr +="'"+fills_data[n].ToString()+"'";
}
else
{
sqlStr += "'"+fills_data[n].ToString() + "',";
}
}
sqlStr += ")";
MessageBox.Show(sqlStr);
SqlCommand cmd = new SqlCommand(sqlStr, conn);
//MessageBox.Show(sqlStr);
cmd.ExecuteScalar();
}
conn.Close();
MessageBox.Show("导入数据结束");
ConverTime函数是把类型转换成日期类型:例如把2013年5月8日 转化成2013-5-8
关于一些对一些数据处理时的特殊转化 参考 :
对字符串保留数字小数点,有中文的日期转化等特殊数据处理
如果不是插入数据 只是对sqlsever的表进行更新时 只需要 改一下拼接的 sql语句就行了
string sqlStr = "update t_p_baseinfo_e set ";
//拼接sql
for (int n = 0; n < fills_name.Count(); n++)
{
if (n == (fills_name.Count() - 1))
{
sqlStr += fills_name[n] + "='" + fills_data[n] + "'";
}
else
{
sqlStr +=fills_name[n] + "='" + fills_data[n] + "',";
}
sqlStr += " where sqlsever_id='" + sqlseverid+"'";