C#操作Access数据库 增删改查

el/2024/6/13 11:32:15

本文以ADOX操作Access

1、在C#中新建AccessClass.cs文件,内容如下

复制代码

复制代码

  1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Text;5 using System.Collections;6 using System.IO;    //包含File7 using System.Data;   //包含datatable8 using System.Data.OleDb;  //包含OleDbConnection9 using System.Windows.Forms;10 11 namespace CsharpAccess090312 {13     public abstract class AccessClass14     {15         public static string myMdbPath;16         public static string[] myTableName=new string[2];17         public static ArrayList[] myMdbHead=new ArrayList[2];18 19         //普通的节点 20         public struct Node21         {22             private string nodeType;23             public string NodeType//表的字段名 24             {25                 set { nodeType = value; }26                 get { return nodeType; }27             }28 29             private string nodeValue;30             public string NodeValue//具体的值 31             {32                 set { nodeValue = value; }33                 get { return nodeValue; }34             }35         }36 37         //数据库初始化38         public static bool MDBInit(string mdbPath, string[] tableName, ArrayList[] mdbHead, int tableNum)39         {40             //检测数据库是否存在,若不存在则创建数据库并创建数据表41             if (!File.Exists(mdbPath))42             {43                 CreateMDBDataBase(mdbPath);//创建mdb44                 for (int i = 0; i < tableNum; i++)45                 {46                     CreateMDBTable(mdbPath, tableName[i], mdbHead[i]);//创建数据表47                 }48             }49             myMdbPath = mdbPath;50             for (int i = 0; i < tableNum; i++)51             {52                 myTableName[i] = tableName[i].Clone().ToString();53             }54             for (int i = 0; i < tableNum; i++)55             {56                 myMdbHead[i] = (ArrayList)mdbHead[i].Clone();57             }58             return true;59         }60 61         //创建mdb 62         public static bool CreateMDBDataBase(string mdbPath)63         {64             try65             {66                 ADOX.CatalogClass cat = new ADOX.CatalogClass();67                 cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";");68                 cat = null;69                 return true;70             }71             catch { return false; }72         }73 74         //新建mdb的表  //mdbHead是一个ArrayList,存储的是table表中的具体列名。 75         public static bool CreateMDBTable(string mdbPath, string tableName, ArrayList mdbHead)76         {77             try78             {79                 ADOX.CatalogClass cat = new ADOX.CatalogClass();//=========================================//=====================================//80                 string sAccessConnection81                     = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath;82                 ADODB.Connection cn = new ADODB.Connection();83                 cn.Open(sAccessConnection, null, null, -1);84                 cat.ActiveConnection = cn;85 86                 //新建一个表 87                 ADOX.TableClass tbl = new ADOX.TableClass();88                 tbl.ParentCatalog = cat;89                 tbl.Name = tableName;90 91                 int size = mdbHead.Count;92                 for (int i = 0; i < size; i++)93                 {94                     //增加一个文本字段 95                     ADOX.ColumnClass col2 = new ADOX.ColumnClass();96                     col2.ParentCatalog = cat;97                     col2.Name = mdbHead[i].ToString();//列的名称 98                     col2.Properties["Jet OLEDB:Allow Zero Length"].Value = false;99                     tbl.Columns.Append(col2, ADOX.DataTypeEnum.adVarWChar, 500);  //把列加入table
100                 }
101                 cat.Tables.Append(tbl);   //这句把表加入数据库(非常重要) 
102                 tbl = null;
103                 cat = null;
104                 cn.Close();
105                 return true;
106             }
107             catch { return false; }
108         }
109 
110 
111         // 读取mdb指定表的全部数据 
112         public static DataTable ReadAllData(string tableName, string mdbPath, ref bool success)
113         {
114             DataTable dt = new DataTable();
115             try
116             {
117                 DataRow dr;
118                 //1、建立连接 
119                 string strConn
120                     = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=";//创建数据库时未设用户及密码,不用提交密码即可操作数据库
121                 OleDbConnection odcConnection = new OleDbConnection(strConn);
122                 //2、打开连接 
123                 odcConnection.Open();
124                 //建立SQL查询 
125                 OleDbCommand odCommand = odcConnection.CreateCommand();
126                 //3、输入查询语句 
127                 odCommand.CommandText = "select * from " + tableName;
128                 //建立读取 
129                 OleDbDataReader odrReader = odCommand.ExecuteReader();
130                 //查询并显示数据 
131                 int size = odrReader.FieldCount; //获取当前行中的列数
132                 for (int i = 0; i < size; i++)  
133                 {
134                     DataColumn dc;
135                     dc = new DataColumn(odrReader.GetName(i)); //获取每一列的名称,放入列结构中
136                     dt.Columns.Add(dc);   //新建的table完成属性列的构建
137                 }
138                 while (odrReader.Read())  //逐条记录(也即逐行)地读取数据
139                 {
140                     dr = dt.NewRow();  //一行数据
141                     for (int i = 0; i < size; i++)
142                     {
143                         dr[odrReader.GetName(i)] = odrReader[odrReader.GetName(i)].ToString(); //逐列读取每单元格数据放到行结构中
144                     }
145                     dt.Rows.Add(dr);  //新建的table完成每条记录的存储
146                 }
147                 //关闭连接 
148                 odrReader.Close();
149                 odcConnection.Close();
150                 success = true;
151                 return dt; 
152             }
153             catch
154             {
155                 success = false;
156                 return dt;
157             }
158         }
159 
160 
161         // 读取指定表的若干列的数据 
162         public static DataTable ReadDataByColumns(string mdbPath, string tableName, string[] columns, ref bool success)
163         {
164             DataTable dt = new DataTable();
165             try
166             {
167                 DataRow dr;
168                 //1、建立连接 
169                 string strConn
170                     = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=";
171                 OleDbConnection odcConnection = new OleDbConnection(strConn);
172                 //2、打开连接 
173                 odcConnection.Open();
174                 //建立SQL查询 
175                 OleDbCommand odCommand = odcConnection.CreateCommand();
176                 //3、输入查询语句 
177                 string strColumn = "";
178                 //if (columns[0] == null)  
179                 //{
180                 //    strColumn = " * ";
181                 //}
182                 //else
183                 //{
184                     for (int i = 0; i < columns.Length; i++)
185                     {
186                         strColumn += columns[i].ToString() + ",";
187                     }
188                     strColumn = strColumn.TrimEnd(',');
189                 //}
190 
191                 odCommand.CommandText = "select " + strColumn + " from " + tableName;
192                 //建立读取 
193                 OleDbDataReader odrReader = odCommand.ExecuteReader();
194                 //查询并显示数据 
195                 int size = odrReader.FieldCount;
196                 for (int i = 0; i < size; i++)
197                 {
198                     DataColumn dc;
199                     dc = new DataColumn(odrReader.GetName(i));
200                     dt.Columns.Add(dc);
201                 }
202 
203                 while (odrReader.Read())
204                 {
205                     dr = dt.NewRow();
206                     for (int i = 0; i < size; i++)
207                     {
208                         dr[odrReader.GetName(i)] = odrReader[odrReader.GetName(i)].ToString();
209                     }
210                     dt.Rows.Add(dr);
211                 }
212                 //关闭连接 
213                 odrReader.Close();
214                 odcConnection.Close();
215                 success = true;
216                 return dt;
217             }
218             catch
219             {
220                 success = false;
221                 return dt;
222             }
223         }
224 
225         //读取指定列数据
226         public static DataTable ReadDataByColumnsBound(string mdbPath, string tableName, string[] columns, Node bound, ref bool success)
227         {
228             DataTable dt = new DataTable();
229             try
230             {
231                 DataRow dr;
232                 //1、建立连接 
233                 string strConn
234                     = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=haoren";
235                 OleDbConnection odcConnection = new OleDbConnection(strConn);
236                 //2、打开连接 
237                 odcConnection.Open();
238                 //建立SQL查询 
239                 OleDbCommand odCommand = odcConnection.CreateCommand();
240                 //3、输入查询语句 
241                 string strColumn = "";
242                 if (columns[0] == null)
243                 {
244                     strColumn = " * ";
245                 }
246                 else
247                 {
248                     for (int i = 0; i < columns.Length; i++)
249                     {
250                         strColumn += columns[i].ToString() + ",";
251                     }
252                     strColumn = strColumn.TrimEnd(',');
253                 }
254 
255                 odCommand.CommandText = "select " + strColumn + " from " + tableName + " where " + bound.NodeType + " = '" + bound.NodeValue + "' ";
256                 //建立读取 
257                 OleDbDataReader odrReader = odCommand.ExecuteReader();
258                 //查询并显示数据 
259                 int size = odrReader.FieldCount;
260                 for (int i = 0; i < size; i++)
261                 {
262                     DataColumn dc;
263                     dc = new DataColumn(odrReader.GetName(i));
264                     dt.Columns.Add(dc);
265                 }
266 
267                 while (odrReader.Read())
268                 {
269                     dr = dt.NewRow();
270                     for (int i = 0; i < size; i++)
271                     {
272                         dr[odrReader.GetName(i)] = odrReader[odrReader.GetName(i)].ToString();
273                     }
274                     dt.Rows.Add(dr);
275                 }
276                 //关闭连接 
277                 odrReader.Close();
278                 odcConnection.Close();
279                 success = true;
280                 return dt;
281             }
282             catch
283             {
284                 success = false;
285                 return dt;
286             }
287         }
288         //==================================================================
289         //函数名:    GetTableNameList
290         //作者:        LiYang
291         //日期:        2015-6-26
292         //功能:        获取ACCESS数据库中的表名
293         //输入参数:    数据库路径
294         //返回值:      List<string>
295         //修改记录: 
296         //==================================================================
297         public static List<string> GetTableNameList(string myMdbPath)
298         {
299             List<string> list = new List<string>();
300             try
301             {
302                 OleDbConnection Conn = new OleDbConnection();
303                 Conn.ConnectionString = "Provider = Microsoft.Jet.OleDb.4.0;Data Source=" + myMdbPath;
304                 Conn.Open();
305                 DataTable dt = Conn.GetSchema("Tables");
306                 foreach (DataRow row in dt.Rows)
307                 {
308                     if (row[3].ToString() == "TABLE")
309                         list.Add(row[2].ToString());
310                 }
311                 Conn.Close();
312                 return list;
313             }
314             catch (Exception ex)
315             {
316                 throw ex;
317             }
318         }
319         //==================================================================
320         //函数名:    GetTableFieldNameList
321         //作者:        LiYang
322         //日期:        2015-6-26
323         //功能:        获取ACCESS数据库指定表名中的字段
324         //输入参数:    数据库路径,表名
325         //返回值:      List<string>  属性列的名称
326         //修改记录: 
327         //==================================================================
328         public static List<string> GetTableFieldNameList(string myMdbPath, string TableName)
329         {
330             List<string> list = new List<string>();
331             try
332             {
333                 OleDbConnection Conn = new OleDbConnection();
334                 Conn.ConnectionString = "Provider = Microsoft.Jet.OleDb.4.0;Data Source=" + myMdbPath;
335                 Conn.Open();
336                 using (OleDbCommand cmd = new OleDbCommand())
337                 {
338                     cmd.CommandText = "SELECT TOP 1 * FROM [" + TableName + "]";//读取一个表中第一条记录,如select top 5 * from tablename,读取表中前5条记录
339                     cmd.Connection = Conn;
340                     OleDbDataReader dr = cmd.ExecuteReader(); //得到列头
341                     for (int i = 0; i < dr.FieldCount; i++)
342                     {
343                         list.Add(dr.GetName(i));//得到属性列名称
344                     }
345                 }
346                 Conn.Close();
347                 return list;
348             }
349             catch (Exception ex)
350             {
351                 throw ex;
352             }
353         }
354         //==================================================================
355         //函数名:    ReadDataByColumnsLike
356         //作者:        LiYang
357         //日期:        2015-6-26
358         //功能:        获取ACCESS数据库指定表名指定列的相似数据到缓存DataTable
359         //输入参数:    数据库路径,表名,列名,相似结点
360         //返回值:        DataTable
361         //修改记录: 
362         //==================================================================
363         public static DataTable ReadDataByColumnsLike(string mdbPath, string tableName, string[] columns, Node Like)
364         {
365             DataTable dt = new DataTable();
366             DataRow dr;
367             try
368             {
369                 OleDbConnection Conn = new OleDbConnection();
370                 Conn.ConnectionString = "Provider = Microsoft.Jet.OleDb.4.0;Data Source=" + myMdbPath;
371                 Conn.Open();
372                 OleDbCommand odCommand = Conn.CreateCommand();
373                 string strColumn = "";
374                 if (columns[0] == null)
375                 {
376                     strColumn = " * ";
377                 }
378                 else
379                 {
380                     for (int i = 0; i < columns.Length; i++)
381                     {
382                         strColumn += columns[i].ToString() + ",";
383                     }
384                     strColumn = strColumn.TrimEnd(',');
385                 }
386 
387                 odCommand.CommandText = "select " + strColumn + " from " + tableName + " where " + Like.NodeType + " LIKE '" + Like.NodeValue + "' ";
388                 OleDbDataReader odrReader = odCommand.ExecuteReader();
389                 //查询并显示数据 
390                 int size = odrReader.FieldCount;
391                 for (int i = 0; i < size; i++)
392                 {
393                     DataColumn dc;
394                     dc = new DataColumn(odrReader.GetName(i));
395                     dt.Columns.Add(dc);
396                 }
397 
398                 while (odrReader.Read())
399                 {
400                     dr = dt.NewRow();
401                     for (int i = 0; i < size; i++)
402                     {
403                         dr[odrReader.GetName(i)] = odrReader[odrReader.GetName(i)].ToString();
404                     }
405                     dt.Rows.Add(dr);
406                 }
407                 //关闭连接 
408                 odrReader.Close();
409                 Conn.Close();
410                 return dt;
411             }
412             catch (Exception ex)
413             {
414                 throw ex;
415             }
416         }
417         /// <summary>  
418         /// 返回某一表的所有字段名  
419         /// </summary>  
420         public static string[] GetTableColumn(string database_path, string varTableName)
421         {
422             DataTable dt = new DataTable();
423             try
424             {
425                 OleDbConnection conn = new OleDbConnection();
426                 conn.ConnectionString = "Provider = Microsoft.Jet.OleDb.4.0;Data Source=" + database_path;
427                 conn.Open();
428                 dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, varTableName, null });
429                 int n = dt.Rows.Count;
430                 string[] strTable = new string[n];
431                 int m = dt.Columns.IndexOf("COLUMN_NAME");
432                 for (int i = 0; i < n; i++)
433                 {
434                     DataRow m_DataRow = dt.Rows[i];
435                     strTable[i] = m_DataRow.ItemArray.GetValue(m).ToString();
436                 }
437                 conn.Close();
438                 return strTable;
439             }
440             catch (Exception ex)
441             {
442                 throw ex;
443             }
444         }
445 
446         //添加一个字段
447         public static void MakeNode(ref ArrayList arraylist, string nodetype, string nodevalue)
448         {
449             AccessClass.Node node = new AccessClass.Node();
450             node.NodeType = nodetype;
451             node.NodeValue = nodevalue;
452             arraylist.Add(node);
453         }
454 
455         //插入数据 
456         public static bool InsertRow(string mdbPath, string tableName, ArrayList insertArray,
457               ref string errinfo)
458         {
459             try
460             {
461                 //1、建立连接 
462                 string strConn
463                     = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=haoren";
464                 OleDbConnection odcConnection = new OleDbConnection(strConn);
465                 //2、打开连接 
466                 odcConnection.Open();
467 
468                 string str_col = "";
469                 int size_col = insertArray.Count;
470                 for (int i = 0; i < size_col; i++)
471                 {
472                     Node vipNode = new Node();
473                     try
474                     {
475                         vipNode = (Node)insertArray[i];
476                     }
477                     catch (System.Exception ex)
478                     {
479                         MessageBox.Show(ex.ToString());
480                     }
481                     vipNode = (Node)insertArray[i];
482                     str_col += vipNode.NodeType + ",";
483                 }
484                 str_col = str_col.TrimEnd(',');
485 
486 
487                 int size_row = insertArray.Count;
488                 string str_row = "";
489                 for (int i = 0; i < size_row; i++)
490                 {
491                     Node vipNode = new Node();
492                     vipNode = (Node)insertArray[i];
493                     string v = vipNode.NodeValue.ToString();
494                     v = DealString(v);
495                     if (v == "")
496                     {
497                         str_row += "null" + ',';
498                     }
499                     else
500                     {
501                         str_row += "'" + v + "'" + ',';
502                     }
503                 }
504                 str_row = str_row.TrimEnd(','); ;
505 
506                 string sql = "insert into " + tableName + @" (" + str_col + ") values" + @"(" + str_row + ")";
507                 OleDbCommand odCommand = new OleDbCommand(sql, odcConnection);
508                 odCommand.ExecuteNonQuery();
509                 odcConnection.Close();
510                 return true;
511             }
512             catch (Exception err)
513             {
514                 errinfo = err.Message;
515                 return false;
516             }
517         }
518 
519 
520         public static bool UpdateRow(string mdbPath, string tableName,
521             Node keyNode, ArrayList insertArray, ref string errinfo)
522         {
523             try
524             {
525                 //1、建立连接 
526                 string strConn
527                     = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=haoren";
528                 OleDbConnection odcConnection = new OleDbConnection(strConn);
529                 //2、打开连接 
530                 odcConnection.Open();
531 
532                 int size = insertArray.Count;
533                 string str = "";
534                 for (int i = 0; i < size; i++)
535                 {
536                     Node node = new Node();
537                     node = (Node)insertArray[i];
538                     string v = node.NodeValue.ToString();
539                     v = DealString(v);
540                     str += node.NodeType + " = ";
541                     if (v == "")
542                     {
543                         str += "null" + ',';
544                     }
545                     else
546                     {
547                         str += "'" + v + "'" + ',';
548                     }
549 
550                 }
551                 str = str.TrimEnd(',');
552 
553                 string sql = "update " + tableName + " set " + str +
554                     " where " + keyNode.NodeType + " = " + "'" + keyNode.NodeValue + "'";
555                 OleDbCommand odCommand = new OleDbCommand(sql, odcConnection);
556                 odCommand.ExecuteNonQuery();
557                 odcConnection.Close();
558                 return true;
559             }
560             catch (Exception err)
561             {
562                 errinfo = err.Message;
563                 return false;
564             }
565         }
566 
567 
568         public static bool UpdateMDBNode(string mdbPath, string tableName, Node keyNode,
569             Node saveNode, ref string errinfo)
570         {
571             try
572             {
573                 //1、建立连接 
574                 string strConn
575                     = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=haoren";
576                 OleDbConnection odcConnection = new OleDbConnection(strConn);
577                 //2、打开连接 
578                 odcConnection.Open();
579 
580                 string sql = @"update " + tableName + " set " + saveNode.NodeType + " = '" + saveNode.NodeValue +
581                     "' where " + keyNode.NodeType + " = " + "'" + keyNode.NodeValue + "'";
582                 OleDbCommand comm = new OleDbCommand(sql, odcConnection);
583                 comm.ExecuteNonQuery();
584                 odcConnection.Close();
585                 return true;
586             }
587             catch (Exception err)
588             {
589                 errinfo = err.Message;
590                 return false;
591             }
592         }
593 
594 
595 
596         //删除一条记录
597         public static bool DeleteRow(string mdbPath, string tableName, Node keyNode, ref string errinfo)
598         {
599             try
600             {
601                 //1、建立连接 
602                 string strConn
603                     = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=haoren";
604                 OleDbConnection odcConnection = new OleDbConnection(strConn);
605                 //2、打开连接 
606                 odcConnection.Open();
607                 string sql = "";
608                 if (keyNode.NodeType == null)
609                 {
610                     sql = @"delete from " + tableName;
611                 }
612                 else
613                 {
614                     sql = @"delete from " + tableName + " where " + keyNode.NodeType + " = " + "'" + keyNode.NodeValue + "' ";
615                 }
616 
617                 OleDbCommand comm = new OleDbCommand(sql, odcConnection);
618                 comm.ExecuteNonQuery();
619                 odcConnection.Close();
620                 return true;
621             }
622             catch (Exception err)
623             {
624                 errinfo = err.Message;
625                 return false;
626             }
627         }
628 
629         public static bool ClearTable(string mdbPath, string tableName, ref string errinfo)
630         {
631 
632             try
633             {
634                 //1、建立连接 
635                 string strConn
636                     = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath + ";Jet OLEDB:Database Password=haoren";
637                 OleDbConnection odcConnection = new OleDbConnection(strConn);
638                 //2、打开连接 
639                 odcConnection.Open();
640                 string sql = "";
641 
642                 sql = @"delete * from " + tableName;
643 
644                 OleDbCommand comm = new OleDbCommand(sql, odcConnection);
645                 comm.ExecuteNonQuery();
646                 odcConnection.Close();
647 
648                 return true;
649             }
650 
651             catch (Exception err)
652             {
653                 errinfo = err.Message;
654                 return false;
655             }
656 
657         }
658 
659 
660 
661         //处理数据,在把数据存到数据库前,先屏蔽那些危险字符!
662         public static string DealString(string str)
663         {
664             str = str.Replace("<", "<");
665             str = str.Replace(">", ">");
666             str = str.Replace("\r", "<br>");
667             str = str.Replace("\'", "’");
668             str = str.Replace("\x0020", " ");
669 
670             return (str);
671         }
672 
673         //恢复数据:把数据库中的数据,还原成未处理前的样子
674         public static string UnDealString(string str)
675         {
676             str = str.Replace("<", "<");
677             str = str.Replace(">", ">");
678             str = str.Replace("<br>", "\r");
679             str = str.Replace("’", "\'");
680             str = str.Replace(" ", "\x0020");
681 
682             return (str);
683         }
684 
685 
686 
687     }
688 }

复制代码

 

复制代码

 

相关问题及解决方法记录

P:ADOX缺少程序集引用 
S:引用C:\Program Files\Common Files\System\ado\msadox.dll,该DLL包含ADOX命名空间,

P:无法对ADOX嵌入式式互操作
S:ADOX属性->嵌入互操作类型改为false

P:ADODB缺少程序集引用
S:引用C:\Program Files\Common Files\System\ado\msjro.dll,该dll包含ADOB命名空间,或在.net中添加adodb也可。


http://www.ngui.cc/el/5545771.html

相关文章

C#数组按值和按引用传递数组区别

C#中&#xff0c;存储数组之类对象的变量并不是实际存储对象本身&#xff0c;而是存储对象的引用。按值传递数组时&#xff0c;程序将变量传递给方法时&#xff0c;被调用方法接受变量的一个副本&#xff0c;因此在被调用时试图修改数据变量的值时&#xff0c;并不会影响变量的…

窗口句柄、窗口类对象的关系

HWND hwnd&#xff1b;//窗口句柄 CWnd wnd&#xff1b;//窗口类对象 窗口类对象中有一个成员是窗口句柄。 窗口句柄&#xff0c;提供了窗口的一个标识&#xff0c;类似于指针的概念&#xff0c;每一个窗口都对应了一个窗口句柄作为其标识&#xff0c;通过句柄可以方便的从内…

OpenCV 图像清晰度评价算法(相机自动对焦)

相机的自动对焦要求相机根据拍摄环境和场景的变化&#xff0c;通过相机内部的微型驱动马达&#xff0c;自动调节相机镜头和CCD之间的距离&#xff0c;保证像平面正好投影到CCD的成像表面上。这时候物体的成像比较清晰&#xff0c;图像细节信息丰富。 相机自动对焦的过程&#…

一种新的图像清晰度评价函数

自动聚焦是机器人视觉、数字视频系统中的关键技术之--,是决定图像质量的重要因素,是获取清晰图 像的第1步。聚焦性能取决于调焦评价函数的准确性和有效性,即评价函数必须具有无偏性好、单峰性强和 较好的抗噪性能。图像模糊的本质是高频分量的损失,聚焦图像比离焦图像包含更多的…

委托事件的线程问题

事件注册方法或委托后&#xff0c;事件所在的线程执行注册的方法或委托&#xff0c;所以如果方法中有跨线程控件就需要使用invoke等处理。

图像灰度图,直方图,像素通道问题

1.图像直方图概述   直方图广泛运用于很多计算机视觉运用当中&#xff0c;通过标记帧与帧之间显著的边缘和颜色的统计变化&#xff0c;来检测视频中场景的变化。在每个兴趣点设置一个有相近特征的直方图所构成 “标签”&#xff0c;用以确定图像中的兴趣点。边缘、色彩、角度…

信号傅里叶变换后的实数和虚数部分理解

傅里叶&#xff08;FFT、DFT、傅立叶、Fourier&#xff09;傅里叶变换的结果为什么含有复数&#xff1f; 为什么傅里叶变换的结果含有复数成份&#xff1f; 看了很多关于FFT的资料&#xff0c;现在看到一个资料说FFT转换的结果是实部虚部&#xff0c;所以不理解为什么从时域转…

C++ 简单实现HTTP GET/POST 请求

HTTP(超文本传输协议)是一种客户端与服务端的传输协议&#xff0c;最早用于浏览器和服务器之间的通信&#xff0c;后来因为其使用灵活、方便等特点&#xff0c;广泛用于客户端与服务端的通信。文章将简单介绍HTTP协议&#xff0c;同时以C方式分别实现HTTP GET、POST 请求 HTTP …

C#无损高质量压缩图片实现代码

最近&#xff0c;项目上涉及到了图像压缩&#xff0c;发现原有的图像压缩功能&#xff0c;虽然保证了图像的大小300K以内&#xff0c;但是压缩后的图像看的不在清晰&#xff0c;并且&#xff0c;限定了图片的Height或者是Width。 在CSDN上看到了一个压缩算法&#xff1a;C#无损…

vs中c++项目的配置

首先&#xff0c;我们一般不会修改解决方案的属性&#xff0c;而是设置每个项目各自的属性. 接着上一篇文章&#xff0c;我们来看看我们应该怎样来设置各项目的项目属性更好&#xff1a; 我们以NYOJ_001项目的Debug版的设置为例&#xff1a; 在常规选项里&#xff0c;我们一…