超难的一道题 在一个FORM上有三个按钮和一个PICTUREBOX,一个按钮用于打开文件,找到图片,打开的文件要自动存到一个ACCESS 文件里.通过其余两个按钮可以使在ACCESS 里的图片向前和向后翻页(next 和 previous).只有授权的使用着可以使用这个软件.在运行中出现的错误要写在Logfile 里.能够写出程序的立即给分 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你不知道有System.Windows.Forms.OpenFileDialog和System.Windows.Forms.FolderBrowserDialog?不知道就去看MSDN... 打开文件当然不难,但是怎么把图片写到数据库里啊,保存路经吗?出现的错误又怎么写到Logfile 里呢.我是菜,各位不菜的大侠总可以给点思路吧.只说风凉话没有任何帮助. 基础书我看了,没有把图片保存到数据库的,也没有怎么写到LOGFILE里的. 太简单了,form外面放4个按钮一个图片框,名称参考代码using System;using System.IO;using System.Data.OleDb;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace access图片操作{ public partial class Form1 : Form { private DataTable _DataTable = new DataTable(); private int _Id =-1; public Form1() { InitializeComponent(); } private void _SaveImageToMDBbutton_Click(object sender, EventArgs e) //保存图片到数据库 { OpenFileDialog openFileDialog=new OpenFileDialog(); openFileDialog.Filter="所有图片|*.jpeg;*.jpg;*.bmp;*.png"; openFileDialog.ShowDialog(); if (openFileDialog.FileName.Length > 0) { FileStream fileStream = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read); byte[] fileByte = new byte[fileStream.Length]; fileStream.Read(fileByte, 0, fileByte.Length); fileStream.Close(); fileStream.Dispose(); OleDbConnection oleDbConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\test.mdb"); System.Data.OleDb.OleDbParameter imageParameter = new OleDbParameter("@image", OleDbType.Binary); imageParameter.Value = fileByte; OleDbCommand oleDbCommand = new OleDbCommand("INSERT INTO test ([image]) VALUES (@image)", oleDbConnection); oleDbCommand.Parameters.Add(imageParameter); try { oleDbConnection.Open(); if (oleDbCommand.ExecuteNonQuery() > 0) MessageBox.Show("插入成功!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception exception) { MessageBox.Show("出错啦:" + exception.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { if (oleDbConnection.State == ConnectionState.Open) oleDbConnection.Close(); } } } private void Previousbutton_Click(object sender, EventArgs e) //上一幅图按钮 { for (int i = 0, k = this._DataTable.Rows.Count; i < k; i++) { if ((int)this._DataTable.Rows[i].ItemArray[0] == this._Id) { if (i == 0) { MessageBox.Show("已是第一幅图!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else { byte[] imageByte = (byte[])this._DataTable.Rows[i - 1].ItemArray[1]; MemoryStream memoryStream = new MemoryStream(imageByte); pictureBox1.Image = Image.FromStream(memoryStream); this._Id = (int) this._DataTable.Rows[i-1].ItemArray[0]; } } } } private void button1_Click(object sender, EventArgs e) //读表按钮 { OleDbConnection oleDbConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\test.mdb"); OleDbDataAdapter oleDbDataAdapter = new OleDbDataAdapter("SELECT Id,Image FROM Test", oleDbConnection); oleDbDataAdapter.Fill(this._DataTable); if(this._DataTable.Rows.Count>0) { this._Id =(int)this._DataTable.Rows[0].ItemArray[0]; byte[] imageByte=(byte[]) this._DataTable.Rows[0].ItemArray[1]; MemoryStream memoryStream=new MemoryStream(imageByte); pictureBox1.Image = Image.FromStream(memoryStream); } } private void _NextImagebutton_Click(object sender, EventArgs e) //下一幅图 { for (int i = 0, k = this._DataTable.Rows.Count; i < k; i++) { if ((int)this._DataTable.Rows[i].ItemArray[0] == this._Id) { if (i == k-1) { MessageBox.Show("已是最后一幅图!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Warning); } else if (k == 1) { MessageBox.Show("只有一幅图!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { byte[] imageByte =(byte[]) this._DataTable.Rows[i + 1].ItemArray[1]; MemoryStream memoryStream = new MemoryStream(imageByte); pictureBox1.Image = Image.FromStream(memoryStream); this._Id =(int) this._DataTable.Rows[i + 1].ItemArray[0]; } } } } }}验证方面自己实现,不知道你想怎么实现。欢迎加入我的群 63979707 讨论。 谢谢BEJON,还有一个问题,你好象没把错误写到LOGFILE文件里啊 放在catch里 using (StreamWriter streamWriter = new StreamWriter(Application.StartupPath + "\\LOGFILE.txt", true, Encoding.Default)) { streamWriter.WriteLine(DateTime.Now + "\t\t" + exception.Message); streamWriter.Close(); streamWriter.Dispose(); }catch不够可以自己加,比如读图片出错(picturbox不一定支持所有你认为是图片的文件) 请教关于C# 的内存释放 我有一个关于C#序列化的问题... c#操作excel后关闭excel.exe的方法 谁能帮我解析一下这段字符串(正则表达式) 谁留个完整正规的项目需求分析设计,好让我走上正路,最好能出现用例图什么之类的 求助:c#如何捕获ctrl+鼠标左键 违反并发性: DeleteCommand 影响了预期 1 条记录中的 0 条? 生产者/消费者 双缓冲/多线程 困扰了好几天的问题? C#的类里面可以指定模版函数吗,像C++那样的? 一个简单的问题?高手们指教!!!!!!! 菜鸟提问 类型问题
using System.IO;
using System.Data.OleDb;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace access图片操作
{
public partial class Form1 : Form
{
private DataTable _DataTable = new DataTable(); private int _Id =-1; public Form1()
{
InitializeComponent();
}
private void _SaveImageToMDBbutton_Click(object sender, EventArgs e) //保存图片到数据库
{
OpenFileDialog openFileDialog=new OpenFileDialog();
openFileDialog.Filter="所有图片|*.jpeg;*.jpg;*.bmp;*.png";
openFileDialog.ShowDialog();
if (openFileDialog.FileName.Length > 0)
{
FileStream fileStream = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read);
byte[] fileByte = new byte[fileStream.Length];
fileStream.Read(fileByte, 0, fileByte.Length);
fileStream.Close();
fileStream.Dispose();
OleDbConnection oleDbConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\test.mdb");
System.Data.OleDb.OleDbParameter imageParameter = new OleDbParameter("@image", OleDbType.Binary);
imageParameter.Value = fileByte;
OleDbCommand oleDbCommand = new OleDbCommand("INSERT INTO test ([image]) VALUES (@image)", oleDbConnection);
oleDbCommand.Parameters.Add(imageParameter);
try
{
oleDbConnection.Open();
if (oleDbCommand.ExecuteNonQuery() > 0) MessageBox.Show("插入成功!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception exception)
{
MessageBox.Show("出错啦:" + exception.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
if (oleDbConnection.State == ConnectionState.Open) oleDbConnection.Close();
}
}
} private void Previousbutton_Click(object sender, EventArgs e) //上一幅图按钮
{
for (int i = 0, k = this._DataTable.Rows.Count; i < k; i++)
{
if ((int)this._DataTable.Rows[i].ItemArray[0] == this._Id)
{
if (i == 0)
{
MessageBox.Show("已是第一幅图!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
byte[] imageByte = (byte[])this._DataTable.Rows[i - 1].ItemArray[1];
MemoryStream memoryStream = new MemoryStream(imageByte);
pictureBox1.Image = Image.FromStream(memoryStream);
this._Id = (int) this._DataTable.Rows[i-1].ItemArray[0];
}
}
}
} private void button1_Click(object sender, EventArgs e) //读表按钮
{
OleDbConnection oleDbConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\test.mdb");
OleDbDataAdapter oleDbDataAdapter = new OleDbDataAdapter("SELECT Id,Image FROM Test", oleDbConnection);
oleDbDataAdapter.Fill(this._DataTable);
if(this._DataTable.Rows.Count>0)
{
this._Id =(int)this._DataTable.Rows[0].ItemArray[0];
byte[] imageByte=(byte[]) this._DataTable.Rows[0].ItemArray[1];
MemoryStream memoryStream=new MemoryStream(imageByte);
pictureBox1.Image = Image.FromStream(memoryStream);
}
} private void _NextImagebutton_Click(object sender, EventArgs e) //下一幅图
{
for (int i = 0, k = this._DataTable.Rows.Count; i < k; i++)
{
if ((int)this._DataTable.Rows[i].ItemArray[0] == this._Id)
{
if (i == k-1)
{
MessageBox.Show("已是最后一幅图!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else if (k == 1)
{
MessageBox.Show("只有一幅图!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
byte[] imageByte =(byte[]) this._DataTable.Rows[i + 1].ItemArray[1];
MemoryStream memoryStream = new MemoryStream(imageByte);
pictureBox1.Image = Image.FromStream(memoryStream);
this._Id =(int) this._DataTable.Rows[i + 1].ItemArray[0];
}
}
}
}
}
}验证方面自己实现,不知道你想怎么实现。欢迎加入我的群 63979707 讨论。
using (StreamWriter streamWriter = new StreamWriter(Application.StartupPath + "\\LOGFILE.txt", true, Encoding.Default))
{
streamWriter.WriteLine(DateTime.Now + "\t\t" + exception.Message);
streamWriter.Close();
streamWriter.Dispose();
}catch不够可以自己加,比如读图片出错(picturbox不一定支持所有你认为是图片的文件)