📄 form1.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Runtime.InteropServices;
using System.Management;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
//申明INI文件的写操作函数WritePrivateProfileString()
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
//申明INI文件的读操作函数GetPrivateProfileString()
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
//建立事务变量
System.Data.SqlClient.SqlTransaction trans;
//建立每张表对应的Adapter
oldDBDataSet_OldTableAdapters.OLD_TABLE1TableAdapter ta1 = new WindowsApplication1.oldDBDataSet_OldTableAdapters.OLD_TABLE1TableAdapter();
oldDBDataSet_OldTableAdapters.OLD_TABLE2TableAdapter ta2 = new WindowsApplication1.oldDBDataSet_OldTableAdapters.OLD_TABLE2TableAdapter();
oldDBDataSet_OldTableAdapters.OLD_TABLE3TableAdapter ta3 = new WindowsApplication1.oldDBDataSet_OldTableAdapters.OLD_TABLE3TableAdapter();
newDBDataSetTableAdapters.NEW_TABLE1TableAdapter nta1 = new WindowsApplication1.newDBDataSetTableAdapters.NEW_TABLE1TableAdapter();
newDBDataSetTableAdapters.NEW_TABLE2TableAdapter nta2 = new WindowsApplication1.newDBDataSetTableAdapters.NEW_TABLE2TableAdapter();
newDBDataSetTableAdapters.NEW_TABLE3TableAdapter nta3 = new WindowsApplication1.newDBDataSetTableAdapters.NEW_TABLE3TableAdapter();
newDBDataSetTableAdapters.NEW_TABLE4TableAdapter nta4 = new WindowsApplication1.newDBDataSetTableAdapters.NEW_TABLE4TableAdapter();
newDBDataSetTableAdapters.NEW_ZIDIAN1TableAdapter nta5 = new WindowsApplication1.newDBDataSetTableAdapters.NEW_ZIDIAN1TableAdapter();
public Form1()
{
InitializeComponent();
}
//按钮点击事件
private void button1_Click(object sender, EventArgs e)
{
//检测filepath.ini文件是否存在, 以及文件中是否已经填写Log文件存储路径
if (!CheckIniFile())
{
return;
}
if (!CheckLogFilePath())
{
return;
}
//获取原始数据表每张表中的字段数,分别存储在三个变量中
int tb1_count = oldDBDataSet_Old.OLD_TABLE1.Columns.Count;
int tb2_count = oldDBDataSet_Old.OLD_TABLE2.Columns.Count;
int tb3_count = oldDBDataSet_Old.OLD_TABLE3.Columns.Count;
//为结合三张原始表创建一个新表并初始化,并创建新表中的字段
DataTable dtnew = new DataTable();
DataColumn dtnew_column;
//分别获取三张原始数据表中的字段并依次添加到新表中
for (int i = 0; i < tb1_count; i++)
{
dtnew_column = new DataColumn(oldDBDataSet_Old.OLD_TABLE1.Columns[i].ColumnName, oldDBDataSet_Old.OLD_TABLE1.Columns[i].DataType);
dtnew.Columns.Add(dtnew_column);
}
for (int i = 1; i < tb2_count; i++)
{
dtnew_column = new DataColumn(oldDBDataSet_Old.OLD_TABLE2.Columns[i].ColumnName, oldDBDataSet_Old.OLD_TABLE2.Columns[i].DataType);
dtnew.Columns.Add(dtnew_column);
}
for (int i = 1; i < tb3_count; i++)
{
dtnew_column = new DataColumn(oldDBDataSet_Old.OLD_TABLE3.Columns[i].ColumnName, oldDBDataSet_Old.OLD_TABLE3.Columns[i].DataType);
dtnew.Columns.Add(dtnew_column);
}
//获取原始数据表中的行数
int dtnew_row_count = oldDBDataSet_Old.OLD_TABLE1.Rows.Count;
int n = 0; //临时变量,作为新表的Rows下标
//依次获取原始数据表中每一行的数据,并添加到新表中
for (int i = 0; i < dtnew_row_count; i++)
{
DataRow dtnew_row = dtnew.NewRow();
n = 0;
for (int j = 0; j < tb1_count; j++, n++)
{
dtnew_row[n] = oldDBDataSet_Old.OLD_TABLE1.Rows[i][j];
}
for (int j = 1; j < tb2_count; j++, n++)
{
dtnew_row[n] = oldDBDataSet_Old.OLD_TABLE2.Rows[i][j];
}
for (int j = 1; j < tb3_count; j++, n++ )
{
dtnew_row[n] = oldDBDataSet_Old.OLD_TABLE3.Rows[i][j];
}
dtnew.Rows.Add(dtnew_row);
}
//向DataSet中添加新建的表
oldDBDataSet_Old.Tables.Add(dtnew);
//自定义函数,用于将拥有原始数据的刚刚创建的表中的数据拷贝到现有的数据表中
CopyTo(dtnew);
}
//窗体初始化
private void Form1_Load(object sender, EventArgs e)
{
//为DataSet中的数据表添加从数据库中取出的数据
ta1.Fill(oldDBDataSet_Old.OLD_TABLE1);
ta2.Fill(oldDBDataSet_Old.OLD_TABLE2);
ta3.Fill(oldDBDataSet_Old.OLD_TABLE3);
nta1.Fill(newDBDataSet.NEW_TABLE1);
nta2.Fill(newDBDataSet.NEW_TABLE2);
nta3.Fill(newDBDataSet.NEW_TABLE3);
nta4.Fill(newDBDataSet.NEW_TABLE4);
nta5.Fill(newDBDataSet.NEW_ZIDIAN1);
}
//-------------------------------------------------------------------------
//自定义函数,用于将拥有原始数据的刚刚创建的表中的数据拷贝到现有的数据表中
//访问类型: private
//返回类型: void
//参数类型: DataTable
//参数意义: 带有原始数据的表
//-------------------------------------------------------------------------
private void CopyTo(DataTable oldDt)
{
//定义变量获得参数中表的行数
int rowCount = oldDt.Rows.Count;
//定义捕获异常的数组及每一元素的信息字符串
ArrayList alError = new ArrayList();
String strError = "";
//为现今需要用的数据表依次建立对应的变量
DataTable newDt1 = newDBDataSet.NEW_TABLE1;
DataTable newDt2 = newDBDataSet.NEW_TABLE2;
DataTable newDt3 = newDBDataSet.NEW_TABLE3;
DataTable newDt4 = newDBDataSet.NEW_TABLE4;
//获得原始表每一行数据,添加到现今用表,并提交到数据库
for (int i = 0; i < rowCount; i++)
{
//依次为现今用表创建行变量
DataRow newDr1 = newDt1.NewRow();
DataRow newDr2 = newDt2.NewRow();
DataRow newDr3 = newDt3.NewRow();
DataRow newDr4 = newDt4.NewRow();
//依次获得一行中每列的原始数据,并添加到现今用表的行中
newDr1["NEW_ID"] = oldDt.Rows[i][0];
newDr2["NEW_ID"] = oldDt.Rows[i][0];
newDr3["NEW_ID"] = oldDt.Rows[i][0];
newDr4["NEW_ID"] = oldDt.Rows[i][0];
newDr1["NEW_XINGMING"] = oldDt.Rows[i][1];
newDr1["NEW_NIANLING"] = oldDt.Rows[i][2];
newDr1["NEW_XINGBIE"] = oldDt.Rows[i][3];
newDr1["NEW_XUELI"] = oldDt.Rows[i][4];
newDr2["NEW_BUMEN"] = oldDt.Rows[i][5];
newDr2["NEW_ZHIWEI"] = oldDt.Rows[i][6];
newDr3["NEW_DIANHUA"] = oldDt.Rows[i][7];
newDr3["NEW_SHOUJI"] = oldDt.Rows[i][8];
newDr3["NEW_DIZHI"] = oldDt.Rows[i][9];
//为规范,可将每列添加到表中
//newDBDataSet.NEW_TABLE1.Rows.Add(newDr1); \ /
//newDBDataSet.NEW_TABLE2.Rows.Add(newDr2); \ /
//newDBDataSet.NEW_TABLE3.Rows.Add(newDr3); \ /
//newDBDataSet.NEW_TABLE4.Rows.Add(newDr4); \ /
// \/
//这种也可以 /\
//newDt1.Rows.Add(newDr1); / \
//newDt2.Rows.Add(newDr2); / \
//newDt3.Rows.Add(newDr3); / \
//newDt4.Rows.Add(newDr4); / \
//为做事务处理,首先判断数据链接是否打开,如果没有打开,则先打开链接
if (nta1.Connection.State != ConnectionState.Open)
{
//打开数据库链接
nta1.Connection.Open();
}
//初始化事务变量
trans = nta1.Connection.BeginTransaction();
//为每张现今用表添加一行数据
try
{
//以下为自定义函数,每张现今用表一个,insert数据用
InsertQuery1((decimal)newDr1["NEW_ID"], newDr1["NEW_XINGMING"].ToString(), newDr1["NEW_NIANLING"].ToString(), (bool)newDr1["NEW_XINGBIE"], newDr1["NEW_XUELI"].ToString());
InsertQuery2((decimal)newDr2["NEW_ID"], newDr2["NEW_BUMEN"].ToString(), newDr2["NEW_ZHIWEI"].ToString());
InsertQuery3((decimal)newDr3["NEW_ID"], newDr3["NEW_DIANHUA"].ToString(), newDr3["NEW_SHOUJI"].ToString(), newDr3["NEW_DIZHI"].ToString());
InsertQuery4((decimal)newDr4["NEW_ID"]);
//为做统一数据事务处理,则不用每张表自带的insert函数
//nta1.InsertQuery((decimal)newDr1["NEW_ID"], newDr1["NEW_XINGMING"].ToString(), newDr1["NEW_NIANLING"].ToString(), (bool)newDr1["NEW_XINGBIE"], newDr1["NEW_XUELI"].ToString());
//nta2.InsertQuery((decimal)newDr2["NEW_ID"], newDr2["NEW_BUMEN"].ToString(), newDr2["NEW_ZHIWEI"].ToString());
//nta3.InsertQuery((decimal)newDr3["NEW_ID"], newDr3["NEW_DIANHUA"].ToString(), newDr3["NEW_SHOUJI"].ToString(), newDr3["NEW_DIZHI"].ToString());
//nta4.InsertQuery((decimal)newDr1["NEW_ID"]);
//测试用,抛出异常
//throw new Exception();
//无异常出现则提交事务
trans.Commit();
}
catch(Exception e) //出现异常
{
//提示异常信息
//MessageBox.Show(e.Message + "\n\n将进行事务回滚!", "出现异常", MessageBoxButtons.OK, MessageBoxIcon.Warning);
//带表名的异常串
//String eName = e.TargetSite.Name;
//switch (eName)
//{
// case "InsertQuery1":
// strError = "表名:\t\tNEW_TABLE1\r\n";
// strError = strError + "行ID:\t\t" + newDr1["NEW_ID"] + "\r\n";
// strError = strError + "异常信息:\t" + e.Message;
// strError = strError + "\r\n-------------------\r\n\r\n";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -