求大神帮忙啊

sunxi7161802 2012-11-15 09:48:08
导入excel的时候第一次没事 当导入成功以后在接着导入的话报错 dlg.ShowDialog() == DialogResult.OK 报错 “尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”
浏览按钮代码:
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "Excel文件(*.xls)|*.xls";
if (dlg.ShowDialog() == DialogResult.OK) 第二次的时候这行报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”
{
string filePath = dlg.FileName;
this.textBox4.Text = filePath;
}
导入按钮代码:
string xiangzhen = "";
string cunming = "";
try
{
OleDbConnectionStringBuilder connectStringBuilder = new OleDbConnectionStringBuilder();
connectStringBuilder.DataSource = this.textBox4.Text.Trim();
connectStringBuilder.Provider = "Microsoft.Jet.OLEDB.4.0";
connectStringBuilder.Add("Extended Properties", "Excel 8.0;HDR=NO");
using (OleDbConnection cn = new OleDbConnection(connectStringBuilder.ConnectionString))
{
DataSet ds = new DataSet();
string sql = "Select * from [Sheet1$]";
OleDbCommand cmdLiming = new OleDbCommand(sql, cn);
cn.Open();
using (OleDbDataReader drLiming = cmdLiming.ExecuteReader())
{
ds.Load(drLiming, LoadOption.OverwriteChanges, new string[] { "Sheet1" });
DataTable dt = ds.Tables["Sheet1"];
if (dt.Rows.Count > 0)
{
int rowCount = dt.Rows.Count;
for (int i = 0; i < rowCount; i++)
{
if (dt.Rows[i][0].ToString().Trim() == "序号" || dt.Rows[i][0].ToString().Trim() == "" || dt.Rows[i][0].ToString().Trim().Contains("以上共计"))
{
dt.Rows.Remove(dt.Rows[i]);
i--; rowCount--;
continue;
}
}
//dataGridView1.DataSource = dt;
for (int i = 0; i < dt.Rows.Count; i++)
{
//dataGridView1.DataSource = dt;
if (dt.Rows[i]["F2"].ToString() != "")
{
xiangzhen = dt.Rows[i]["F2"].ToString();
}
if (dt.Rows[i]["F3"].ToString() != "")
{
cunming = dt.Rows[i]["F3"].ToString();
}
dataGridView1.DataSource = dt;
//写入数据库数据
string c = "select * from users where sfzh='" + dt.Rows[i]["F6"].ToString() + "'";
DataTable dt1 = WebBase.Data.AcDb.GetDataTab1(c);
if (dt1.Rows.Count > 0 && dt1 != null)
{

string Mysql1 = "insert into lizhiganbu(sfzh,bte,[year]) values('" + dt.Rows[i]["F6"].ToString() + "','" + dt.Rows[i]["F8"].ToString() + "','" + comboBox3.Text + "')";
WebBase.Data.AcDb.GetExec(Mysql1);
}
else
{
string Mysql = "insert into users(name,sfzh,xz,cm,[sex],yhzh,Remark) values('" + dt.Rows[i]["F4"].ToString() + "','" + dt.Rows[i]["F6"].ToString() + "','" + xiangzhen + "','" + cunming + "','" + dt.Rows[i]["F5"].ToString() + "','" + dt.Rows[i]["F7"].ToString() + "','" + dt.Rows[i]["F9"].ToString() + "')";
WebBase.Data.AcDb.GetExec(Mysql);

string Mysql1 = "insert into lizhiganbu(sfzh,bte,[year]) values('" + dt.Rows[i]["F6"].ToString() + "','" + dt.Rows[i]["F8"].ToString() + "','" + comboBox3.Text + "')";
WebBase.Data.AcDb.GetExec(Mysql1);

}

}

MessageBox.Show("数据导入成功!");
textBox4.Text = "";
}
else
{
MessageBox.Show("请检查你的Excel中是否存在数据");
}
}
cn.Close();
cn.Dispose();

}

}

catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
连接类:
public static bool GetExec(string sql)
{

try
{
OleDbConnection conn = new OleDbConnection(GlobParam.AcConn);
OleDbCommand cmd = new OleDbCommand(sql, conn);
conn.Open();
int result = cmd.ExecuteNonQuery();
cmd.Connection.Close();
cmd.Connection.Dispose();
conn.Close();
conn.Dispose();
return true;
}
catch (Exception ex)
{
string error = ex.Message.ToString();
return false;
}

}
#endregion

#region 用于执行sql查询语句

public static DataTable GetDataTab1(string sql)
{
OleDbConnection conn = new OleDbConnection(GlobParam.AcConn);
try
{
OleDbCommand cmd = new OleDbCommand(sql, conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
cmd.Connection.Close();
cmd.Connection.Dispose();
conn.Close();
conn.Dispose();
return dt;
}
catch (Exception ex)
{
string error = ex.Message.ToString();
return null;
}
}
求大神帮我看看 是不是那个连接没关闭的过呀?
...全文
112 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunxi7161802 2012-11-15
  • 打赏
  • 举报
回复
引用 1 楼 libinguest 的回复:
关闭相关的进程,后再进行导入
我不知道我那没关闭啊
风之影子 2012-11-15
  • 打赏
  • 举报
回复
关闭相关的进程,后再进行导入

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧