//@@@@@@@@@@@@@@@@@@@@@@@@@@第一个范例@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//以下的代码是从一个EXCEL中读取数据,写到ACCESS中。
//引入EXCEL,在D盘建立一个EXCEL源数据文件,以及ACCESS的目标数据文件
public static DataTable ExcelToDataTable(string strExcelFileName, string strSheetName)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties=Excel 5.0;";
string strExcel = string.Format("select * from [{0}$]", strSheetName);
DataSet ds = new DataSet();
using (OleDbConnection conn = new OleDbConnection(strConn))
{
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);
adapter.Fill(ds, strSheetName);
conn.Close();
}
return ds.Tables[strSheetName];
}
public static void InsertDataToAccess(OleDbConnection oleDbConn, string v0, string v1, string v2, string v3, string v4, string v5)
{
string strInsertString = "INSERT INTO t1 (id,[order],name,age,sex,demo) VALUES (@id,@order,@name,@age,@sex,@demo)";
OleDbCommand oComm = new OleDbCommand(strInsertString, oleDbConn);
oComm.Parameters.Add("@id", OleDbType.Char, 50);
oComm.Parameters["@id"].Value = v0;
oComm.Parameters.Add("@order", OleDbType.Char, 50);
oComm.Parameters["@order"].Value = v1;
oComm.Parameters.Add("@name", OleDbType.Char, 50);
oComm.Parameters["@name"].Value = v2;
oComm.Parameters.Add("@age", OleDbType.Char, 50);
oComm.Parameters["@age"].Value = v3;
oComm.Parameters.Add("@sex", OleDbType.Char, 50);
oComm.Parameters["@sex"].Value = v4;
oComm.Parameters.Add("@demo", OleDbType.Char, 50);
oComm.Parameters["@demo"].Value = v5;
oComm.ExecuteNonQuery();
}
private void Form1_Load(object sender, EventArgs e)
{
DataTable dtExcel = ExcelToDataTable("D://b.xls", "Sheet1");
OleDbConnection oleDbConn = new OleDbConnection();
oleDbConn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/A.mdb;User Id=admin;Password=;";
oleDbConn.Open();
for (int i = 0; i < dtExcel.Rows.Count-1; i++)
{
string nowTime = System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
InsertDataToAccess(oleDbConn,
dtExcel.Rows[i][0].ToString(),
dtExcel.Rows[i][1].ToString(),
dtExcel.Rows[i][2].ToString(),
dtExcel.Rows[i][3].ToString(),
dtExcel.Rows[i][4].ToString(),
nowTime
);
}
oleDbConn.Close();
//@@@@@@@@@@@@@@@@@@@@@@@@@@第二个范例@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//以下的代码是对一个EXCEL文件的读写操作
//代码使用基本条件
//*using System.Reflection; // 引用这个才能使用Missing字段
//*需要使用EXCEL外部引用
//MISSING的作用是,通过反射产生一个函数的默认参数
//在写外来对象组件操作过程中,有时对调用的方法中不用的参数调用Null错误,填充此参数即可。
//功能开始
Excel.Application xApp = new Excel.ApplicationClass();
xApp.Visible = true;
//得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件
Excel.Workbook xBook = xApp.Workbooks._Open(@"D:/B.xls",
Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
//第二种方式 新建一个XLS文件
//Excel.Workbook xBook = xApp.Workbooks.Add(Missing.Value);
//取得当前xls文件的SHEET,第一句是取第一个,第二句是取活动的。
Excel.Worksheet xSheet = (Excel.Worksheet)xBook.Sheets[1];
//Excel.Worksheet xSheet=(Excel.Worksheet)xApp.ActiveSheet;
//读取数据,通过Range对象
Excel.Range rng1 = xSheet.get_Range("A1",Type.Missing);
//读取,通过Range对象,但使用不同的接口得到Range
Excel.Range rng2 = (Excel.Range)xSheet.Cells[3, 1];
Console.WriteLine(rng2.Value2);
//写入数据
//无论是Range属性,Cells,Rows,Columns这些属性,其类型都是Excel.Range,都有Value2这个属性
//Value得到它的值. Value2则是针对数字的.
Excel.Range rng3 = xSheet.get_Range("C6", Missing.Value);
rng3.Value2 = 4;
rng3.Interior.ColorIndex = 4; //设置Range的背景色(绿色)
保存方式一:保存WorkBook
//xBook.SaveAs(@"D:/CData.xls",
//Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
// Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value,
// Missing.Value, Missing.Value);
保存方式二:保存WorkSheet
//xSheet.SaveAs(@"D:/CData2.xls",
//Missing.Value, Missing.Value, Missing.Value, Missing.Value,
// Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
//保存方式三
xBook.Save();
xSheet = null;
xBook = null;
xApp.Quit(); //这一句是非常重要的,否则Excel对象不能从内存中退出
xApp = null;
//@@@@@@@@@@@@@@@@@@@@@@@@@@第三个范例@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/**
* 这是一个基于C#的对ACCESS数据库进行增删改查的程序,运行可以通过。
*
* 但我觉得程序结构上还不太优化,比如:
*
* 1、OleDbCommand odCommand = odcConnection.CreateCommand()和odCommand.CommandText = strSql;能不能单独提出来?
*
* 2、做一个功能比较全面的方法,只需要两个参数(conn,sql)能执行所有的SQL文。遇到更新、插入、删除还能把件数报出来。
*
* 3、INSERT 和 UPDATE 语句如果字段特别特别多,拼SQL文时,能不能做简化处理,比如用?来代替,象JAVA那样。怎么实现啊。
*
* 4、怎么做能让DB连接这部分功能,独立出来(做成基底,包括ACCESS、SQL、ORACLE)以后再用的时候,只要添上参数,就能跑SQL.
*
**/
//建立一个接续,初期化
OleDbConnection conn = initConn();
//做查询
string strSql = "select * from t1";
SelectSta(conn, strSql);
//做更新
string strupdate = "update t1 set age = 12";
UpdateStatus(conn, strupdate);
//做插入
string strrecorder = "4,3,'tom',43,1,'ddd'";
string strinsert = "insert into t1 values(" + strrecorder + ")";//能不能改改,这样太别扭了。
InsertStatus(conn, strinsert);
//做删除
string strDel = "delete from t1 where age <> '12'";
DeleteStatus(conn, strDel);
conn.Close();
}
//查询处理
private void SelectSta(OleDbConnection odcConnection, string strSql)
{
OleDbCommand odCommand = odcConnection.CreateCommand();
odCommand.CommandText = strSql;
OleDbDataReader odrReader = odCommand.ExecuteReader();
ArrayList Arr = new ArrayList();
while (odrReader.Read())
{
Arr.Add(odrReader["NAME"].ToString());
listBox1.Items.Add(odrReader["NAME"].ToString());
}
}
//更新处理
private void UpdateStatus(OleDbConnection conn, string strupdate)
{
OleDbCommand odCommand = conn.CreateCommand();
odCommand.CommandText = strupdate;
int intCnt = odCommand.ExecuteNonQuery();
MessageBox.Show("一共有【"+intCnt+"】条数据被更新!");
}
//删除处理
private void DeleteStatus(OleDbConnection conn, string strDel)
{
OleDbCommand odCommand = conn.CreateCommand();
odCommand.CommandText = strDel;
int intCnt = odCommand.ExecuteNonQuery();
MessageBox.Show("一共有【" + intCnt + "】条数据被删除!");
}
//插入处理
private void InsertStatus(OleDbConnection conn, string strinsert)
{
OleDbCommand odCommand = conn.CreateCommand();
odCommand.CommandText = strinsert;
int intCnt = odCommand.ExecuteNonQuery();
MessageBox.Show("一共有【" + intCnt + "】条数据被插入!");
}
//初始连接
private OleDbConnection initConn()
{
string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/A.mdb";
OleDbConnection odcConnection = new OleDbConnection(strConn);
odcConnection.Open();
return odcConnection;
}