Добрый день, Подскажите пожалуйста,уже голову сломал,что не так. В общем есть база в акцессе(если точнее сказать то в одном mdb около 10 таблиц,которые постоянно обнолвяются), нужно загрузить каждую таблицу в ms sql. Раньше писал в embarcadero через ado,dasetы....на данный момент нужно реализовать через visual studio C#. Вроде выгрузку написал,но ничего не выгружается.Приведу часть кода | Код | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.Odbc; using System.Data.OleDb; using System.Threading;
namespace proekt { public partial class import_form : Form { public main_form mf; public Form2 obj; private DataBase dat; //Для oleDB public string sDBConnStr2; public OleDbConnection Con2; //--------------- private string sDSourceConnStr; public OdbcConnection ConnODBC; public volatile Int32 iPTAcc; public volatile Int32 iPTCln; public volatile Int32 iPTBln; public volatile Int32 iPTDoc; public volatile Int32 iPTEy; public volatile Int32 iPTPc; public string Source_Conn_Oledb; public volatile string sDateBalance;
public Thread tACC, tCLN, tBLN, tDOC, tEY, tPC;//потоки для загрузки
public string sErrAcc, sErrCln, sErrBln, sErrDoc, sErrEy, sErrPc;//ошибки
public import_form(main_form fr2) { InitializeComponent(); mf = fr2; }
private void import_form_Load(object sender, EventArgs e) { sDBConnStr2 = "Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=C:\test.mdb"; if (Con2 == null) Con2 = new OleDbConnection(); Con2.ConnectionString = this.sDBConnStr2; try { Con2.Open(); timer1.Enabled = true;
} catch { timer1.Enabled = false; MessageBox.Show("Ошибка подключения к OleDB!"); this.Close(); }
}
private void timer1_Tick(object sender, EventArgs e) { timer1.Enabled = false;
tCLN = new Thread(cln);//поток для загрузки данных tCLN.Start(); while (!tCLN.IsAlive) ;
timer2.Enabled = true; } void cln() { //Для sql - соединения SqlConnection ConnSqlTCln; SqlDataReader RecordSetSqlTCln; // Для ODBC OdbcConnection ConnODBCTCln; OdbcDataReader RecordSetODBCDB; //Для OleDB OleDbConnection ConOleDB; OleDbDataReader RecordSetOleDB; Int32 iNumerator; Int32 iStep; Int32 iIter; String MNGFAM, MNGNAME, MNGLAST, bss; Int32 BISNESTYPE, HOLDING;
iPTCln = 0;
ConOleDB = new OleDbConnection(); ConOleDB.ConnectionString = this.sDBConnStr2; //************************************************** ConnSqlTCln = new SqlConnection("Data Source=od;User ID=aa;Password=aal;Initial Catalog=test");
ConOleDB.Open(); ConnSqlTCln.Open();
SqlCommand CmdSqlTCln = new SqlCommand(); CmdSqlTCln.Connection = ConnSqlTCln;
OleDbCommand CmdOleDB;
CmdOleDB = ConOleDB.CreateCommand(); CmdOleDB.CommandText = "select count(*) from cl"; RecordSetOleDB = CmdOleDB.ExecuteReader();
RecordSetOleDB.Read(); iNumerator = Convert.ToInt32(RecordSetOleDB[0]); RecordSetOleDB.Close();
CmdOleDB.CommandText = "select * from cl "; RecordSetOleDB = CmdOleDB.ExecuteReader();
iStep = iNumerator / 100;
iIter = 0;
while (RecordSetOleDB.Read()) {
CmdSqlTCln.Cancel(); CmdSqlTCln.CommandText = "select a1,a2,a3,a4,a5 from test_CLN where CL=" + Convert.ToString(RecordSetOleDB["clt"]); RecordSetSqlTCln = CmdSqlTCln.ExecuteReader();
if (RecordSetSqlTCln.Read()) { MNGFAM = RecordSetSqlTCln["MNGFAM"].ToString(); MNGNAME = RecordSetSqlTCln["MNGNAME"].ToString(); MNGLAST = RecordSetSqlTCln["MNGLAST"].ToString(); bss = RecordSetSqlTCln["bss"].ToString();
if (RecordSetSqlTCln["BISNESTYPE"].ToString() != "") { BISNESTYPE = Convert.ToInt32(RecordSetSqlTCln["BISNESTYPE"]); } else { BISNESTYPE = 0; }
if (RecordSetSqlTCln["HOLDING"].ToString() != "") { HOLDING = Convert.ToInt32(RecordSetSqlTCln["HOLDING"]); } else { HOLDING = 0; } } else { MNGFAM = ""; MNGNAME = ""; MNGLAST = ""; bss = ""; BISNESTYPE = 0; HOLDING = 0; }
CmdSqlTCln.Cancel(); CmdSqlTCln.CommandText = "delete from test where CL=" + Convert.ToString(RecordSetOleDB["clt"]); //CmdSqlTCln.ExecuteNonQuery(); //RecordSetSqlTCln.Close(); // dat2.DoSQL("delete from cl where clt='" + Convert.ToString(RecordSetOleDB["clt"]) + "'");
CmdSqlTCln.Cancel(); CmdSqlTCln.CommandText = " insert into test("здесь все необходмые поля") "; CmdSqlTCln.CommandText += "values ( " + RecordSetOleDB["clt"] + ",'"; ................ ................ ................ CmdSqlTCln.CommandText += b2 + "')";
if (iIter == iStep) { iIter = 0; iPTCln = iPTCln + 1; }
iIter = iIter + 1; RecordSetSqlTCln.Close(); }
CmdSqlTCln.Cancel(); //закрываю команды RecordSetOleDB.Close();//закрываю датаридеры/подключения CmdOleDB.Cancel(); ConOleDB.Close(); ConnSqlTCln.Close(); }
private void import_form_FormClosed(object sender, FormClosedEventArgs e) { timer2.Enabled = false; tCLN.Abort(); //обрываю поток richTextBox1.Text = sErrAcc; Con2.Close(); }
private void timer2_Tick(object sender, EventArgs e) { if (iPTCln < 100) progressBar1.Value = iPTCln;
this.Text = "Загрузка данных за [" + sDateBalance + "]";
if ((Convert.ToString(tCLN.ThreadState) == "Stopped")) { if ((sErrCln == null)) { this.Close(); timer2.Enabled = false; MessageBox.Show("Загрузка данных завершена успешно!"); } else { timer2.Enabled = false; richTextBox1.Visible = true; richTextBox1.Text = sErrCln = " + sErrCln + "; } } }
} }
|
import_form - форма для импорта, перед ней стоит авторизационная форма,которая в случае успеха пускает в основную, из основной выбрается импорт и другие операции. Авторизация проходит и на стороне ms sql и mdb. может что упускаю?
|