分类 💯C# 下的文章 - 社畜猿
首页
🕒归档
📖留言板
💌关于
搜 索
1
我的小世界——博客上线啦
1,323 阅读
2
写于小程序上线之前
1,209 阅读
3
近期准备上线本站小程序
868 阅读
4
利用CSS3制作旋转3D立方体
745 阅读
5
RabbitMq C# .NET 接收广播 消费者 订阅者 简单使用 ~~
381 阅读
💯C#
🐘PHP
📝烂笔头
♉侃侃
登录
搜 索
标签搜索
React Native
rabbmitmq
thinkphp
Mysql
Typecho
socket
uniapp
tinkphp
php
echart
C语言
程序猿
累计撰写
130
篇文章
累计收到
17
条评论
首页
栏目
💯C#
🐘PHP
📝烂笔头
♉侃侃
页面
🕒归档
📖留言板
💌关于
用户登录
登录
找到
47
篇与
相关的结果
2022-11-27
Nginx+NET6+Vue部署windows
Nginx+NET6+Vue部署windows
2022年11月27日
35 阅读
0 评论
1 点赞
2022-11-25
C# Mysql 多条件查询技巧笔记
C# 笔记SQL语句连接
2022年11月25日
14 阅读
0 评论
1 点赞
2022-09-14
C#控制台程序重启
var applicationPath = System.Reflection.Assembly.GetExecutingAssembly().Location; Process.Start(applicationPath); Environment.Exit(Environment.ExitCode);
2022年09月14日
32 阅读
0 评论
1 点赞
2022-06-01
C# 查询表和字段是否存在,不存在则新建
自动检测服务器上的数据库是否存在某表和某字段,如果表不存在,先新建表,再在表下查询某字段,如果不存在,则新建字段。private void Database_Operation(ComboBox ICChip) { try { if (PubVar.SQL_Connection)//如果数据库能打开 { using (SqlConnection conn = new SqlConnection(PubVar.connStr))//创建连接对象,并使用using释放(关闭),连接用完后会被自动关闭 { //if (conn.State == ConnectionState.Open) conn.Close();//如果打开则先关闭 conn.Open(); // 打开数据库连接 string sql = "select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME='" + ICChip.Text.Trim() + "'"; SqlCommand command = new SqlCommand(sql, conn);//调用公共类中的ExceRead方法创建数据阅读器 var Read = command.ExecuteScalar(); if (Read == null)//加个判断,没有则创建表 { sql = "create table [" + ICChip.Text.Trim() + "]([NO.] [int] identity(1,1))";//([NO.] [int] identity(1,1))";//创建表 //identity(1,1)自增ID using (SqlConnection Conn = new SqlConnection(PubVar.connStr)) { Conn.Open(); command = new SqlCommand(sql, Conn); command.ExecuteNonQuery(); } } //判断字段是否存在 sql = "SELECT *FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + ICChip.Text.Trim() + "' AND COLUMN_NAME = '新字段'"; using (SqlConnection Conn = new SqlConnection(PubVar.connStr)) { Conn.Open(); command = new SqlCommand(sql, Conn); Read = command.ExecuteScalar(); } if (Read == null)//如果没有字段则创建 { sql = "ALTER TABLE [" + ICChip.Text.Trim() + "] ADD [新字段] [text] null";//id int primary key IDENTITY(1,1) NOT NULL //创建字段 using (SqlConnection Conn = new SqlConnection(PubVar.connStr)) { Conn.Open(); command = new SqlCommand(sql, Conn); command.ExecuteNonQuery(); } } } } } catch (Exception ex) { MessageBox.Show("错误信息:" + ex.Message, "创建数据库失败!"); } }
2022年06月01日
63 阅读
0 评论
3 点赞
2022-05-13
C# 读取blob 数据byte[]
C# 读取blob 数据byte[]
2022年05月13日
38 阅读
0 评论
2 点赞
2022-04-08
C# listView Wpf
代码<ListView Height="303" HorizontalAlignment="Left" Name="listView1" VerticalAlignment="Top" Width="778" ItemsSource=""> <ListView.View> <GridView> <GridViewColumn x:Name="gvc"> <GridViewColumn.Header> <CheckBox Click="CheckBox_Click_1">全选</CheckBox> </GridViewColumn.Header> <GridViewColumn.CellTemplate> <DataTemplate> <CheckBox Click="CheckBox_Click" Tag=""></CheckBox> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Header="用户id" DisplayMemberBinding="" /> <GridViewColumn Header="用户名" DisplayMemberBinding="" /> <GridViewColumn Header="密 码" DisplayMemberBinding="" /> <GridViewColumn Header="操作"> <GridViewColumn.CellTemplate> <DataTemplate> <Button Content="删除" Width="75" Height="23" Click="Button_Click" CommandParameter=""/> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView>using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WPFGridView { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { private List<int> selectUid = new List<int>();//保存多选用户ID private List<int> allUid = new List<int>();//保存全选用户ID private List<User> list = new List<User>();//用户列表源数据 public MainWindow() { InitializeComponent(); this.DataBinding(); } /// <summary> /// 列表数据初始化并绑定 /// </summary> private void DataBinding() { for (int i = 0; i < 5; i++) { User user = new User() { Uid = i + 1, Username = "username" + i, Password = "password" }; list.Add(user); } this.listView1.ItemsSource = list;//为ListView绑定数据源 } /// <summary> /// 复选框删除用户 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, RoutedEventArgs e) { this.DeleteUsers(selectUid); this.listView1.Items.Refresh();//刷新数据 } /// <summary> /// 由ChecBox的Click事件来记录被选中行的 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CheckBox_Click(object sender, RoutedEventArgs e) { CheckBox cb = sender as CheckBox; int uid = Convert.ToInt32(cb.Tag.ToString()); //获取该行id if (cb.IsChecked == true) { selectUid.Add(uid); //如果选中就保存id } else { selectUid.Remove(uid); //如果选中取消就删除里面的id } } /// <summary> /// 批量删除用户 /// </summary> private void DeleteUsers(List<int> selectUid) { if (selectUid.Count > 0) { foreach (var uid in selectUid) { list.Remove(list[uid - 1]); } } } /// <summary> /// 按钮单行删除 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button_Click(object sender, RoutedEventArgs e) { Button b = sender as Button; int uid = Convert.ToInt32(b.CommandParameter); this.DeleteUser(uid); this.listView1.Items.Refresh(); } /// <summary> /// 删除一个用户 /// </summary> /// <param name="uid"></param> private void DeleteUser(int uid) { list.Remove(list[uid - 1]); } /// <summary> /// 全选 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CheckBox_Click_1(object sender, RoutedEventArgs e) { CheckBox cb = sender as CheckBox; if (cb.IsChecked == true) { allUid = list.Select(l => l.Uid).ToList(); } else { allUid.Clear(); } } } }
2022年04月08日
91 阅读
0 评论
1 点赞
2022-02-16
C#操作SQLite数据库
1、SQLite 简介SQLite是一个开源、免费的小型RDBMS(关系型数据库),能独立运行、无服务器、零配置、支持事物,用C实现,内存占用较小,支持绝大数的SQL92标准。这意味着与其他数据库一样,您不需要在系统中配置。SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。2、 为什么选择 SQLite?不需要一个单独的服务器进程或操作的系统(无服务器的)。SQLite 不需要配置,这意味着不需要安装或管理。一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。SQLite 是自给自足的,这意味着不需要任何外部的依赖。SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。3、C#操作数据库基本方式:Data Source=c:mydb.db;Version=3;Nuget 直接搜索安装:System.Data.SQLite.Core代码实例using System; using System.Data.SQLite; namespace SQLiteSamples { class Program { //数据库连接 SQLiteConnection m_dbConnection; static void Main(string[] args) { Program p = new Program(); } public Program() { createNewDatabase(); connectToDatabase(); createTable(); fillTable(); printHighscores(); } //创建一个空的数据库 void createNewDatabase() { SQLiteConnection.CreateFile("MyDatabase.db");//可以不要此句 } //创建一个连接到指定数据库 void connectToDatabase() { m_dbConnection = new SQLiteConnection("Data Source=MyDatabase.db;Version=3;");//没有数据库则自动创建 m_dbConnection.Open(); } //在指定数据库中创建一个table void createTable() { string sql = "create table if not exists highscores (name varchar(20), score int)"; SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection); command.ExecuteNonQuery(); } //插入一些数据 void fillTable() { string sql = "insert into highscores (name, score) values ('Me', 3000)"; SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection); command.ExecuteNonQuery(); sql = "insert into highscores (name, score) values ('Myself', 6000)"; command = new SQLiteCommand(sql, m_dbConnection); command.ExecuteNonQuery(); sql = "insert into highscores (name, score) values ('And I', 9001)"; command = new SQLiteCommand(sql, m_dbConnection); command.ExecuteNonQuery(); } //使用sql查询语句,并显示结果 void printHighscores() { string sql = "select * from highscores order by score desc"; SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection); SQLiteDataReader reader = command.ExecuteReader(); while (reader.Read()) Console.WriteLine("Name: " + reader["name"] + "\tScore: " + reader["score"]); Console.ReadLine(); } } }
2022年02月16日
238 阅读
0 评论
0 点赞
2022-02-10
C# 设置程序的开机自启动、关闭自启动
C# 设置程序的开机自启动、关闭自启动
2022年02月10日
221 阅读
0 评论
1 点赞
2021-12-15
C# 委托
c#委托winformdelegate void SetTextCallback(double[] text); SetTextCallback deg = new SetTextCallback(SetText); this.Invoke(deg, new object[] }); private void SetText(double[] text) { label19.Text = text[0] + ""; textBox6.Text = text[3] + ""; textBox7.Text = text[2] + ""; textBox3.Text = (1000/text[4]).ToString("f2"); label26.Text = (text[2] - text[3]).ToString("f3"); }wpfApp.Current.Dispatcher.BeginInvoke(new Action(() => { Fpsnum.Content = fpsnum + ""; }));高级用法using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace multiThread { public partial class FormMain : Form { public FormMain() { InitializeComponent(); //指定不再捕获对错误线程的调用 Control.CheckForIllegalCrossThreadCalls = false; } #region 最基本的多线程调用 private void btn_Update_Click(object sender, EventArgs e) { Thread t = new Thread(new ThreadStart(DataUpdate)); t.Start(); } /// <summary> /// 数据处理 /// </summary> private void DataUpdate() { //通过循环,模拟数据处理过程 for (int i = 0; i < 10; i++) { //在未设置CheckForIllegalCrossThreadCalls情况下,如果直接操作memoEdit_main,则会弹出【线程间操作无效: 从不是创建控件XXX的线程访问它】错误 memoEdit_main.Text = memoEdit_main.Text + "\r\n" + DateTime.Now.ToString(); //MessageBox.Show(DateTime.Now.ToString()); //暂停1s Thread.Sleep(1000); } MessageBox.Show("处理完成!"); } #endregion #region 使用INVOKE方法通过子线程更新主线程控件 /// <summary> /// 1、定义界面更新操作 /// 更新Memoedit信息并定位到行尾 /// </summary> /// <param name="strMsg"></param> private void MainThreadUIOper(string strMsg) { memoEdit_main.Text = memoEdit_main.Text + "\r\n" + strMsg; memoEdit_main.SelectionStart = memoEdit_main.Text.Length; memoEdit_main.ScrollToCaret(); Application.DoEvents(); } /// <summary> /// 2、定义委托事件,用于委托上一步定义的MainThreadUIOper /// </summary> /// <param name="str"></param> public delegate void UIOperDelegate(string str); /// <summary> /// 3、定义子线程执行操作函数 /// </summary> /// <param name="strMsg"></param> private void DoWork(object para) { string strPara = para.ToString(); for (int i = 0; i < 10; i++) { //注意BeginInvoke和Invoke的区别,根据实际情况选用,前者为异步,后者为同步 //也可以将new UIOperDelegate(MainThreadUIOper)提出来单独定义 UIOperDelegate temp = new UIOperDelegate(MainThreadUIOper); 后面公共引用 this.Invoke(new UIOperDelegate(MainThreadUIOper), new object[] ); //暂停1s Thread.Sleep(1000); } //完成后发送相关信息 this.BeginInvoke(new UIOperDelegate(MainThreadUIOper), new Object[] ); //使用 MessageBoxOptions.ServiceNotification是的窗口始终在最上一层显示 MessageBox.Show("提示", "测试完成!", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification); } /// <summary> /// 4、在主线程中开启子线程并传递参数给子线程 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_start_Click(object sender, EventArgs e) { memoEdit_main.Text = ""; memoEdit_main.Update(); //注意,如果需要给子线程传递参数,需要使用ParameterizedThreadStart,否则使用ThreadStart即可,后面直接thread.Start(); Thread thread = new Thread(new ParameterizedThreadStart(DoWork)); thread.Start("para"); } #endregion #region 使用BackgroundWorker方法进行异步操作 /// <summary> /// 1、定义BackgroundWorker对象 /// </summary> private BackgroundWorker m_backgroundWorker = null; /// <summary> /// 2、主体方法,定义子操作函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void m_backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { for (int i = 0; i < 10; i++) { //在线程中更新UI(通过ReportProgress方法) m_backgroundWorker.ReportProgress(50, DateTime.Now.ToString()); //暂停1s Thread.Sleep(1000); } //完成后发送相关信息 m_backgroundWorker.ReportProgress(100, "操作完成"); } /// <summary> /// 3、定义执行UI更新事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void m_backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { memoEdit_main.Text = memoEdit_main.Text + "\r\n" + e.UserState.ToString(); memoEdit_main.SelectionStart = memoEdit_main.Text.Length; memoEdit_main.ScrollToCaret(); Application.DoEvents(); } /// <summary> /// 4、注册事件(执行线程主体、执行UI更新事件) /// 启动子线程 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_prop_Click(object sender, EventArgs e) { m_backgroundWorker = new System.ComponentModel.BackgroundWorker(); //设置报告进度更新,注意此选项必须设置为true,否则无法返回进度 m_backgroundWorker.WorkerReportsProgress = true; //注册线程主体方法 m_backgroundWorker.DoWork += new DoWorkEventHandler(m_backgroundWorker_DoWork); //注册更新UI方法 m_backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(m_backgroundWorker_ProgressChanged); //注册子线程执行完成事件 m_backgroundWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.m_backgroundWorker_RunWorkerCompleted); this.m_backgroundWorker.RunWorkerAsync(); } /// <summary> /// 子线程执行完成后操作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void m_backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { MessageBox.Show("操作完成!"); } #endregion #region 通过UI线程的SynchronizationContext的Post/Send方法更新UI /// <summary> /// 1、定义UI线程的同步上下文 /// </summary> SynchronizationContext m_SyncContext = null; /// <summary> /// 3、定义线程的主体方法 /// </summary> private void ThreadProcSafePost() { for (int i = 0; i < 10; i++) { //在线程中更新UI(通过UI线程同步上下文m_SyncContext) m_SyncContext.Post(SetTextSafePost, DateTime.Now.ToString()); //暂停1s Thread.Sleep(1000); } //完成后发送相关信息 m_SyncContext.Post(SetTextSafePost, "操作完成"); } /// <summary> /// 4、更新UI方法 /// </summary> /// <param name="text"></param> private void SetTextSafePost(object str) { memoEdit_main.Text = memoEdit_main.Text + "\r\n" + str.ToString(); memoEdit_main.SelectionStart = memoEdit_main.Text.Length; memoEdit_main.ScrollToCaret(); Application.DoEvents(); } /// <summary> /// 2、获取UI线程同步上下文(建议在窗体构造函数或FormLoad事件中,这里因为测试方便,直接放在了这里) /// 启动线程 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_sync_Click(object sender, EventArgs e) { //获取UI线程同步上下文 m_SyncContext = SynchronizationContext.Current; Thread thread = new Thread(new ThreadStart(this.ThreadProcSafePost)); thread.Start(); } #endregion } }
2021年12月15日
40 阅读
0 评论
1 点赞
2021-12-08
C# Find() 和FindIndex()的用法:找出满足集合List<char>特定条件的字符。
C# Find() 和FindIndex()的用法
2021年12月08日
98 阅读
0 评论
1 点赞
1
2
3
4
5