当前位置: 首页 > article >正文

C#的DataTable类精简汇总

目录

一、DataTable概述

1.创建 DataTable

2.添加行

3.修改行

4.删除行

5.查询行

6.排序行

7.合并 DataTable

8.克隆 DataTable

9.复制 DataTable

10.使用 DataView 过滤和排序

11.使用 DataTable 的事件

12.使用 DataTable 的约束

13.使用 DataTable 的表达式列

14.使用 DataTable 的 XML 序列化

15.使用 DataTable 的 JSON 序列化

二、总结


一、DataTable概述

C# 中的 DataTable 是一个非常重要的类,用于在内存中存储和操作数据。它类似于数据库中的表,具有行和列的结构。下面是一个详细的教程,涵盖了 DataTable 的常见操作方法,并提供了相应的示例代码。

1.创建 DataTable

首先,我们需要创建一个 DataTable 对象,并为其添加列。

using System;
using System.Data;class Program
{static void Main(){// 创建 DataTableDataTable table = new DataTable("MyTable");// 添加列table.Columns.Add("ID", typeof(int));table.Columns.Add("Name", typeof(string));table.Columns.Add("Age", typeof(int));// 打印表结构foreach (DataColumn column in table.Columns){Console.WriteLine(column.ColumnName + " - " + column.DataType);}}
}

2.添加行

我们可以使用 NewRow() 方法创建新行,并将其添加到 DataTable 中。

using System;
using System.Data;class Program
{static void Main(){DataTable table = new DataTable("MyTable");table.Columns.Add("ID", typeof(int));table.Columns.Add("Name", typeof(string));table.Columns.Add("Age", typeof(int));// 添加行DataRow row1 = table.NewRow();row1["ID"] = 1;row1["Name"] = "Alice";row1["Age"] = 25;table.Rows.Add(row1);DataRow row2 = table.NewRow();row2["ID"] = 2;row2["Name"] = "Bob";row2["Age"] = 30;table.Rows.Add(row2);// 打印行数据foreach (DataRow row in table.Rows){Console.WriteLine($"{row["ID"]}, {row["Name"]}, {row["Age"]}");}}
}

3.修改行

我们可以通过索引或条件查找行,并修改其数据。

using System;
using System.Data;class Program
{static void Main(){DataTable table = new DataTable("MyTable");table.Columns.Add("ID", typeof(int));table.Columns.Add("Name", typeof(string));table.Columns.Add("Age", typeof(int));DataRow row1 = table.NewRow();row1["ID"] = 1;row1["Name"] = "Alice";row1["Age"] = 25;table.Rows.Add(row1);DataRow row2 = table.NewRow();row2["ID"] = 2;row2["Name"] = "Bob";row2["Age"] = 30;table.Rows.Add(row2);// 修改行数据DataRow rowToUpdate = table.Rows[0];rowToUpdate["Name"] = "Alice Smith";rowToUpdate["Age"] = 26;// 打印修改后的行数据foreach (DataRow row in table.Rows){Console.WriteLine($"{row["ID"]}, {row["Name"]}, {row["Age"]}");}}
}

4.删除行

我们可以通过 Remove() 或 Delete() 方法删除行。

using System;
using System.Data;class Program
{static void Main(){DataTable table = new DataTable("MyTable");table.Columns.Add("ID", typeof(int));table.Columns.Add("Name", typeof(string));table.Columns.Add("Age", typeof(int));DataRow row1 = table.NewRow();row1["ID"] = 1;row1["Name"] = "Alice";row1["Age"] = 25;table.Rows.Add(row1);DataRow row2 = table.NewRow();row2["ID"] = 2;row2["Name"] = "Bob";row2["Age"] = 30;table.Rows.Add(row2);// 删除行table.Rows[0].Delete(); // 标记为删除table.AcceptChanges();  // 提交删除// 打印剩余行数据foreach (DataRow row in table.Rows){Console.WriteLine($"{row["ID"]}, {row["Name"]}, {row["Age"]}");}}
}

5.查询行

我们可以使用 Select() 方法查询符合条件的行。

using System;
using System.Data;class Program
{static void Main(){DataTable table = new DataTable("MyTable");table.Columns.Add("ID", typeof(int));table.Columns.Add("Name", typeof(string));table.Columns.Add("Age", typeof(int));DataRow row1 = table.NewRow();row1["ID"] = 1;row1["Name"] = "Alice";row1["Age"] = 25;table.Rows.Add(row1);DataRow row2 = table.NewRow();row2["ID"] = 2;row2["Name"] = "Bob";row2["Age"] = 30;table.Rows.Add(row2);// 查询行DataRow[] rows = table.Select("Age > 26");// 打印查询结果foreach (DataRow row in rows){Console.WriteLine($"{row["ID"]}, {row["Name"]}, {row["Age"]}");}}
}

6.排序行

我们可以使用 DefaultView.Sort 属性对行进行排序。

using System;
using System.Data;class Program
{static void Main(){DataTable table = new DataTable("MyTable");table.Columns.Add("ID", typeof(int));table.Columns.Add("Name", typeof(string));table.Columns.Add("Age", typeof(int));DataRow row1 = table.NewRow();row1["ID"] = 1;row1["Name"] = "Alice";row1["Age"] = 25;table.Rows.Add(row1);DataRow row2 = table.NewRow();row2["ID"] = 2;row2["Name"] = "Bob";row2["Age"] = 30;table.Rows.Add(row2);// 排序table.DefaultView.Sort = "Age DESC";// 打印排序后的行数据foreach (DataRowView rowView in table.DefaultView){DataRow row = rowView.Row;Console.WriteLine($"{row["ID"]}, {row["Name"]}, {row["Age"]}");}}
}

7.合并 DataTable

我们可以使用 Merge() 方法合并两个 DataTable

using System;
using System.Data;class Program
{static void Main(){DataTable table1 = new DataTable("MyTable");table1.Columns.Add("ID", typeof(int));table1.Columns.Add("Name", typeof(string));table1.Columns.Add("Age", typeof(int));DataRow row1 = table1.NewRow();row1["ID"] = 1;row1["Name"] = "Alice";row1["Age"] = 25;table1.Rows.Add(row1);DataTable table2 = new DataTable("MyTable");table2.Columns.Add("ID", typeof(int));table2.Columns.Add("Name", typeof(string));table2.Columns.Add("Age", typeof(int));DataRow row2 = table2.NewRow();row2["ID"] = 2;row2["Name"] = "Bob";row2["Age"] = 30;table2.Rows.Add(row2);// 合并 DataTabletable1.Merge(table2);// 打印合并后的行数据foreach (DataRow row in table1.Rows){Console.WriteLine($"{row["ID"]}, {row["Name"]}, {row["Age"]}");}}
}

8.克隆 DataTable

我们可以使用 Clone() 方法克隆 DataTable 的结构。

using System;
using System.Data;class Program
{static void Main(){DataTable table1 = new DataTable("MyTable");table1.Columns.Add("ID", typeof(int));table1.Columns.Add("Name", typeof(string));table1.Columns.Add("Age", typeof(int));DataRow row1 = table1.NewRow();row1["ID"] = 1;row1["Name"] = "Alice";row1["Age"] = 25;table1.Rows.Add(row1);// 克隆 DataTableDataTable table2 = table1.Clone();// 打印克隆后的表结构foreach (DataColumn column in table2.Columns){Console.WriteLine(column.ColumnName + " - " + column.DataType);}}
}

9.复制 DataTable

我们可以使用 Copy() 方法复制 DataTable 的结构和数据。

using System;
using System.Data;class Program
{static void Main(){DataTable table1 = new DataTable("MyTable");table1.Columns.Add("ID", typeof(int));table1.Columns.Add("Name", typeof(string));table1.Columns.Add("Age", typeof(int));DataRow row1 = table1.NewRow();row1["ID"] = 1;row1["Name"] = "Alice";row1["Age"] = 25;table1.Rows.Add(row1);// 复制 DataTableDataTable table2 = table1.Copy();// 打印复制后的行数据foreach (DataRow row in table2.Rows){Console.WriteLine($"{row["ID"]}, {row["Name"]}, {row["Age"]}");}}
}

10.使用 DataView 过滤和排序

DataView 是 DataTable 的一个视图,可以用于过滤和排序数据。

using System;
using System.Data;class Program
{static void Main(){DataTable table = new DataTable("MyTable");table.Columns.Add("ID", typeof(int));table.Columns.Add("Name", typeof(string));table.Columns.Add("Age", typeof(int));DataRow row1 = table.NewRow();row1["ID"] = 1;row1["Name"] = "Alice";row1["Age"] = 25;table.Rows.Add(row1);DataRow row2 = table.NewRow();row2["ID"] = 2;row2["Name"] = "Bob";row2["Age"] = 30;table.Rows.Add(row2);// 创建 DataViewDataView view = new DataView(table);view.RowFilter = "Age > 26";view.Sort = "Name DESC";// 打印过滤和排序后的行数据foreach (DataRowView rowView in view){DataRow row = rowView.Row;Console.WriteLine($"{row["ID"]}, {row["Name"]}, {row["Age"]}");}}
}

11.使用 DataTable 的事件

DataTable 提供了多个事件,如 RowChangedRowChangingRowDeletedRowDeleting 等,可以在数据发生变化时触发。

using System;
using System.Data;class Program
{static void Main(){DataTable table = new DataTable("MyTable");table.Columns.Add("ID", typeof(int));table.Columns.Add("Name", typeof(string));table.Columns.Add("Age", typeof(int));// 订阅事件table.RowChanged += new DataRowChangeEventHandler(RowChangedEvent);DataRow row1 = table.NewRow();row1["ID"] = 1;row1["Name"] = "Alice";row1["Age"] = 25;table.Rows.Add(row1);}private static void RowChangedEvent(object sender, DataRowChangeEventArgs e){Console.WriteLine($"Row changed: {e.Action}, {e.Row["Name"]}");}
}

12.使用 DataTable 的约束

我们可以为 DataTable 添加约束,如主键约束、唯一约束等。

using System;
using System.Data;class Program
{static void Main(){DataTable table = new DataTable("MyTable");table.Columns.Add("ID", typeof(int));table.Columns.Add("Name", typeof(string));table.Columns.Add("Age", typeof(int));// 添加主键约束table.PrimaryKey = new DataColumn[] { table.Columns["ID"] };// 添加唯一约束table.Columns["Name"].Unique = true;DataRow row1 = table.NewRow();row1["ID"] = 1;row1["Name"] = "Alice";row1["Age"] = 25;table.Rows.Add(row1);// 尝试添加重复主键try{DataRow row2 = table.NewRow();row2["ID"] = 1; // 重复主键row2["Name"] = "Bob";row2["Age"] = 30;table.Rows.Add(row2);}catch (Exception ex){Console.WriteLine(ex.Message);}}
}

13.使用 DataTable 的表达式列

我们可以使用表达式列来计算列的值。

using System;
using System.Data;class Program
{static void Main(){DataTable table = new DataTable("MyTable");table.Columns.Add("ID", typeof(int));table.Columns.Add("Name", typeof(string));table.Columns.Add("Age", typeof(int));// 添加表达式列table.Columns.Add("IsAdult", typeof(bool), "Age >= 18");DataRow row1 = table.NewRow();row1["ID"] = 1;row1["Name"] = "Alice";row1["Age"] = 25;table.Rows.Add(row1);DataRow row2 = table.NewRow();row2["ID"] = 2;row2["Name"] = "Bob";row2["Age"] = 16;table.Rows.Add(row2);// 打印表达式列的值foreach (DataRow row in table.Rows){Console.WriteLine($"{row["Name"]} is adult: {row["IsAdult"]}");}}
}

14.使用 DataTable 的 XML 序列化

我们可以将 DataTable 序列化为 XML,或者从 XML 反序列化为 DataTable

using System;
using System.Data;
using System.IO;class Program
{static void Main(){DataTable table = new DataTable("MyTable");table.Columns.Add("ID", typeof(int));table.Columns.Add("Name", typeof(string));table.Columns.Add("Age", typeof(int));DataRow row1 = table.NewRow();row1["ID"] = 1;row1["Name"] = "Alice";row1["Age"] = 25;table.Rows.Add(row1);// 序列化为 XMLstring xml = table.GetXml();Console.WriteLine(xml);// 将 XML 保存到文件File.WriteAllText("table.xml", xml);// 从 XML 反序列化为 DataTableDataTable newTable = new DataTable();newTable.ReadXml("table.xml");// 打印反序列化后的行数据foreach (DataRow row in newTable.Rows){Console.WriteLine($"{row["ID"]}, {row["Name"]}, {row["Age"]}");}}
}

15.使用 DataTable 的 JSON 序列化

我们可以使用 JsonConvert 类将 DataTable 序列化为 JSON,或者从 JSON 反序列化为 DataTable

using System;
using System.Data;
using Newtonsoft.Json;class Program
{static void Main(){DataTable table = new DataTable("MyTable");table.Columns.Add("ID", typeof(int));table.Columns.Add("Name", typeof(string));table.Columns.Add("Age", typeof(int));DataRow row1 = table.NewRow();row1["ID"] = 1;row1["Name"] = "Alice";row1["Age"] = 25;table.Rows.Add(row1);// 序列化为 JSONstring json = JsonConvert.SerializeObject(table);Console.WriteLine(json);// 从 JSON 反序列化为 DataTableDataTable newTable = JsonConvert.DeserializeObject<DataTable>(json);// 打印反序列化后的行数据foreach (DataRow row in newTable.Rows){Console.WriteLine($"{row["ID"]}, {row["Name"]}, {row["Age"]}");}}
}

二、总结

DataTable 是 C# 中非常强大的数据结构,适用于处理内存中的数据。通过本教程,我们应该已经掌握了 DataTable 的基本操作,包括创建、添加、修改、删除、查询、排序、合并、克隆、复制、使用 DataView、事件处理、约束、表达式列、XML 和 JSON 序列化等操作。

相关文章:

C#的DataTable类精简汇总

目录 一、DataTable概述 1.创建 DataTable 2.添加行 3.修改行 4.删除行 5.查询行 6.排序行 7.合并 DataTable 8.克隆 DataTable 9.复制 DataTable 10.使用 DataView 过滤和排序 11.使用 DataTable 的事件 12.使用 DataTable 的约束 13.使用 DataTable 的表达式列 …...

DeepSeek官方发布R1模型推荐设置

今年以来&#xff0c;DeepSeek便在AI领域独占鳌头&#xff0c;热度一骑绝尘。其官方App更是创造了惊人纪录&#xff0c;成为史上最快突破3000万日活的应用&#xff0c;这一成绩无疑彰显了它在大众中的超高人气与强大吸引力。一时间&#xff0c;各大AI及云服务厂商纷纷投身其中&…...

STM32 ADC介绍(硬件原理篇)

目录 背景 AD转换器 采样与保持 量化 编码 AD转换器转换原理 DA转换原理 AD转换原理 1.逐次逼近型AD转换器 2.并联比较型AD转换器 编码器 同步D触发器和边沿D触发器 基本RS触发器 同步RS触发器 同步D触发器 边沿型D触发器&#xff08;维持-阻塞D触发器&#xff…...

pytest测试专题 - 1.2 如何获得美观的测试报告

<< 返回目录 1 pytest测试专题 - 1.2 如何获得美观的测试报告 1.1 背景 虽然pytest命令的报文很详细&#xff0c;用例在执行调试时还算比较方便阅读和提取失败信息&#xff0c; 但对于大量测试用例运行时&#xff0c;可能会存在以下不足 报文被冲掉测试日志没法归档 …...

Bash 中的运算方式

目录 概述&#xff1a; 1. (()) 运算符 2. let 命令 3. expr 命令 4. $[] 直接运算 5. bc&#xff08;计算器&#xff0c;支持浮点数&#xff09; 6. awk&#xff08;强大的文本处理工具&#xff0c;也可计算&#xff09; 概述&#xff1a; Bash 本身只支持整数运算&am…...

linux 板子的wifi模块连上路由器后,用udhcpc给板子wifi分配ip,udhcpc获取到ip,但没有写入wlan0网卡上

linux 板子的wifi模块连上路由器后&#xff0c;用udhcpc给板子wifi分配ip&#xff0c;udhcpc获取到ip,但没有写入wlan0网卡上 这里的问题是 /usr/share/udhcpc/default.script脚本有问题 用下面正确脚本&#xff0c;即可写进去 #!/bin/sh# udhcpc script for busybox # Copyr…...

超纯水设备的智能化控制系统为用户带来安全简便的操作体验

随着信息技术的发展&#xff0c;智能化已经成为工业装备的重要发展方向之一。超纯水设备在这方面也走在了前列&#xff0c;配备了高性能的PLC控制系统及人机交互界面&#xff0c;实现了全方位的智能监控和自动化操作。本文将重点介绍该设备的智能化控制系统&#xff0c;探讨它如…...

性格测评小程序03搭建用户管理

目录 1 创建数据源2 搭建后台3 开通权限4 搭建启用禁用功能最终效果总结 性格测评小程序我们期望是用户先进行注册&#xff0c;注册之后使用测评功能。这样方便留存用户的联系信息&#xff0c;日后还可以推送对应的相关活动促进应用的活跃。实现这个功能我们要先创建数据源&…...

Linux-C/C++《七、字符串处理》(字符串输入/输出、C 库中提供的字符串处理函数、正则表达式等)

字符串处理在几乎所有的编程语言中都是一个绕不开的话题&#xff0c;在一些高级语言当中&#xff0c;对字符串的处理支 持度更是完善&#xff0c;譬如 C、 C# 、 Python 等。若在 C 语言中想要对字符串进行相关的处理&#xff0c;譬如将两个字符串进行拼接、字符串查找、两个…...

如何使用CSS画一个三角形,原理是什么?

如何用 CSS 画一个三角形&#xff1f;原理和实战指南 一、核心原理 CSS 画三角形的本质是利用边框&#xff08;border&#xff09;的叠加特性。当一个元素的宽高为 0 时&#xff0c;其边框会以对角线形式相交&#xff0c;形成四个独立的三角形区域。通过控制某一边的边框颜色为…...

调用DeepSeek API接口:实现智能数据挖掘与分析

在当今数据驱动的时代&#xff0c;企业和开发者越来越依赖高效的数据挖掘与分析工具来获取有价值的洞察。DeepSeek作为一款先进的智能数据挖掘平台&#xff0c;提供了强大的API接口&#xff0c;帮助用户轻松集成其功能到自己的应用中。本文将详细介绍如何调用DeepSeek API接口&…...

iOS主要知识点梳理回顾-5-运行时方法交换

方法交换可以放在 load 或 initialize 方法中&#xff0c;也可以自己根据时机来空&#xff0c;比如开启某个开关后才需要交换方法。如果是在load中调用&#xff0c;交换工作会在类加载时&#xff08;程序启动&#xff09;自动调用&#xff1b;如果是在initialize中调用&#xf…...

基于若依开发的工程项目管系统开源免费,用于工程项目投标、进度及成本管理的OA 办公开源系统,非常出色!

一、简介 今天给大家推荐一个基于 RuoYi-Flowable-Plus 框架二次开发的开源工程项目管理系统&#xff0c;专为工程项目的投标管理、项目进度控制、成本管理以及 OA 办公需求设计。 该项目结合了 Spring Boot、Mybatis、Vue 和 ElementUI 等技术栈&#xff0c;提供了丰富的功能…...

uni-app 学习(一)

一、环境搭建和运行 &#xff08;一&#xff09;创建项目 直接进行创建 &#xff08;二&#xff09;项目结构理解 pages 是页面 静态资源 打包文件&#xff0c;看我们想输出成什么格式 app.vue 页面的入口文件 main.js 是项目的入口文件 存放对打包文件的配置 pages 存放整…...

本地部署DeepSeek + AnythingLLM 搭建高效安全的个人知识库

环境准备: 本地部署方案请参考博客:windows平台本地部署DeepSeek大模型+Open WebUI网页界面(可以离线使用)-CSDN博客 windows平台本地部署DeepSeek大模型+Chatbox界面(可以离线使用)-CSDN博客 根据本人电脑配置:windows11 + i9-13900HX+RTX4060+DDR5 5600 32G内存 确…...

【git-hub项目:YOLOs-CPP】本地实现03:跑自己的实例分割模型

本节博客,我们继续讲解,如何在cpu+windows上,跑通自己的实例分割模型。 目录 模型 类别名称 量化 导出模型 拉取最新代码 进入官网ultralytics 模型 该项目包括存储在 models 和 quantized_models 目录中的各种预训练标准 YOLO 模型: 模型类型模型名称标准模型yolo5…...

【Qt】QObject类的主要功能

在 Qt 中&#xff0c;QObject 类是所有 Qt 对象的基类&#xff0c;提供了许多基础功能&#xff0c;使得 Qt 的对象系统能够有效地工作。它为其他类提供了核心的机制&#xff0c;比如信号和槽机制、对象树结构、内存管理等。 QObject 类的主要功能&#xff1a; 信号和槽机制&am…...

OpenEuler学习笔记(三十):在OpenEuler上搭建3D建模环境

在OpenEuler上搭建3D建模环境&#xff0c;通常可以选择一些常见的3D建模软件&#xff0c;如Blender、FreeCAD等。以下以搭建Blender和FreeCAD这两款软件的使用环境为例&#xff0c;为你详细介绍搭建步骤。 搭建Blender 3D建模环境 1. 更新系统软件包 首先&#xff0c;确保系…...

nsc account 及user管理

从安全角度&#xff0c;推荐使用sign 模式进行nats account及用户管理 把权限放到account level 用户密码泄露可以通过快速更换用户可以设置过期日期&#xff0c;进行安全轮换 此外通过nsc 管理用户和权限&#xff0c;可以统一实现全局管控&#xff0c;包括subject管控&#…...

把 DeepSeek1.5b 部署在显卡小于4G的电脑上

这里写自定义目录标题 介绍准备安装 Ollama查看CUDA需要版本安装CudaToolkit检查Cuda是否装好设置Ollama环境变量验证是否跑在GPU上ollama如何导入本地下载的模型安装及配置docker安装open-webui启动open-webui开始对话 调整gpu精度 介绍 Deepseek1.5b能够运行在只用cpu和gpu内…...

Git子模块实战:大型后台管理系统模块拆分实践

案例背景 某企业级后台管理系统需要拆分为三个核心模块&#xff1a; 权限中心 (auth-center)&#xff1a;负责RBAC权限管理数据可视化 (data-visualization)&#xff1a;包含BI看板模块工作流引擎 (workflow-engine)&#xff1a;审批流程核心组件 每个模块由独立团队开发维护…...

【做一个微信小程序】校园事件页面实现

前言 为了进一步扩展校园事件页面的功能,我们可以添加 搜索、分类筛选 和 渐变卡片色 等特性。以下是详细的方案和源码实现。 扩展功能设计 1. 搜索功能 在页面顶部添加搜索框,用户输入关键词后,筛选出匹配的事件。2. 分类筛选 在页面顶部添加分类标签(如“全部”、“活动…...

基于 Filebeat 的日志收集

在现代分布式系统中&#xff0c;日志数据作为关键的监控与故障排查依据&#xff0c;越来越受到重视。本文将深入探讨 Filebeat 的技术原理、配置方法及在 ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;生态系统中的应用&#xff0c;帮助开发者构建高效、稳定的日…...

Python教程108:针对面向对象Class类知识要点,源码示例再演示

类的基础结构&#xff0c;比如定义类、初始化方法__init__&#xff0c;然后实例化对象。然后是类的属性&#xff0c;包括实例属性和类属性。接着是方法&#xff0c;比如实例方法、类方法、静态方法的区别。还有继承和多态&#xff0c;这是面向对象的重要部分。可能还需要提到特…...

如何在Excel和WPS中进行翻译

文档翻译我们可以用在线翻译工具&#xff0c;Excel工作表的翻译使用在线翻译工具就不是特别方便&#xff0c;那么如何快速进行翻译呢&#xff0c;我们今天介绍在不同的场景下如何利用翻译函数和Python程序来实现单元格的快速翻译。 一、在wps中进行翻译 WPS是我们常用的办公软…...

zola + github page,用 workflows 部署

之前的Zola都是本地build之后&#xff0c;再push到github上&#xff0c;这种方式很明显的弊端就是只能在本地编辑&#xff0c;而不能通过github编辑&#xff0c;再pull到本地&#xff0c;缺乏了灵活性。因此将zola用workflows来部署。 repo地址&#xff1a;https://github.com/…...

DeepSeek从入门到精通:提示词设计的系统化指南

目录 引言&#xff1a;AIGC时代的核心竞争力 第一部分 基础篇&#xff1a;提示词的本质与核心结构 1.1 什么是提示词&#xff1f; 1.2 提示词的黄金三角结构 第二部分 类型篇&#xff1a;提示词的六大范式 2.1 提示语的本质特征 2.2 提示语的类型 2.2.1 指令型提示词 …...

org.apache.kafka.common.errors.TimeoutException

个人博客地址&#xff1a;org.apache.kafka.common.errors.TimeoutException | 一张假钞的真实世界 使用kafka-console-producer.sh向远端Kafka写入数据时遇到以下错误&#xff1a; $ bin/kafka-console-producer.sh --broker-list 172.16.72.202:9092 --topic test This is …...

DeepSeek免费部署到WPS或Office

部署到WPS - 通过OfficeAI插件接入&#xff1a; - 准备工作&#xff1a;安装最新版本的WPS Office软件&#xff1b;访问DeepSeek官网&#xff0c;点击右上角的“API开放平台”&#xff0c;登录账号&#xff08;若无账号需先注册&#xff09;&#xff0c;登录成功后&#xff0c;…...

智能手表表带圆孔同心度检测

在智能手表的制造工艺中&#xff0c;表带圆孔同心度检测是确保产品品质的关键环节。精准的同心度不仅关乎表带与表体的完美适配&#xff0c;更直接影响用户的佩戴舒适度和产品的整体美观度。稍有偏差&#xff0c;就可能导致表带安装困难、佩戴时出现晃动&#xff0c;甚至影响智…...