C#实现与数据库的链接

王柳  金牌会员 | 2024-8-24 15:35:14 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 539|帖子 539|积分 1617


  • 选择数据库:首先,你必要选择一个数据库体系来存储和检索环境监控数据。常见的选择包罗SQL Server、MySQL、PostgreSQL、SQLite等。
  • 建立数据库连接:利用ADO.NET、Entity Framework、Dapper等库来建立与数据库的连接。
  • 设计数据库模式:在数据库中创建表来存储环境数据,如温度、湿度、光照等。
  • 收集环境数据:利用传感器或其他设备收集环境数据。
  • 将数据写入数据库:将收集到的环境数据写入数据库。
  • 查询和展示数据:从数据库中查询数据,并在控制台、Web界面或其他UI上展示。
  • 设置警报:根据预设的阈值设置警报,当环境数据超出范围时发送通知。
首先,确保你的项目中已经安装了SQL Server等客户端库(如System.Data.SqlClient)。


目次
一.代码演示
二.操作解说
三.轻易出现的错误




一.代码演示


  1. using Sunny.UI;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.IO.Ports;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. using System.Windows.Forms.DataVisualization.Charting;
  13. namespace 环境监控
  14. {
  15.     public partial class Form1 : UIForm
  16.     {
  17.         private SerialPort serialPort;
  18.         private int temp;
  19.         private int hum;
  20.         private int led;
  21.         private int xCount = 1;
  22.         private textEntities3 testEntities;
  23.         public Form1()
  24.         {
  25.             InitializeComponent();
  26.         }
  27.         private void Form1_Load(object sender, EventArgs e)
  28.         {
  29.             serialPort = new SerialPort();
  30.             serialPort.BaudRate = 115200;
  31.             serialPort.DataReceived += MySerialPortReceive;
  32.             this.uiComboBoxSerial.SelectedIndex = 0;
  33.             this.chart1.Series.Add("温度");
  34.             chart1.Series["温度"].ChartType = SeriesChartType.Spline;
  35.             testEntities = new textEntities3();
  36.         }
  37.         private void MySerialPortReceive(object sender, SerialDataReceivedEventArgs e)
  38.         {
  39.             byte[] data = new byte[5];
  40.             int count = serialPort.Read(data, 0, 5);
  41.             if (count != 5)
  42.             {
  43.                 return;
  44.             }
  45.             if (data[0] != 0x55 || data[4] != 0xaa)
  46.             {
  47.                 return;
  48.             }
  49.             temp = data[1];
  50.             hum = data[2];
  51.             led = data[3];
  52.             sensor sensor = new sensor();
  53.             sensor.temp = temp;
  54.             sensor.hump = hum;
  55.             sensor.time = DateTime.Now.ToLocalTime();
  56.             testEntities.AddTosensor(sensor);
  57.             testEntities.SaveChanges();
  58.             this.Invoke(new Action(() => {
  59.                 this.uiTextBoxTemp.Text = temp.ToString();
  60.                 this.uiTextBoxHum.Text = hum.ToString();
  61.                 if (led == 0)
  62.                 {
  63.                     this.pictureBox1.Image = Properties.Resources.ledOff;
  64.                 }
  65.                 else
  66.                 {
  67.                     this.pictureBox1.Image = Properties.Resources.ledON;
  68.                 }
  69.                 xCount++;
  70.                 if (chart1.Series["温度"].Points.Count >= 20)
  71.                 {
  72.                     chart1.Series.Add("温度").Points.RemoveAt(0);
  73.                 }
  74.                 chart1.Series["温度"].Points.RemoveAt(0);
  75.                 xCount++;
  76.                 if (chart1.Series["湿度"].Points.Count >= 20)
  77.                 {
  78.                     chart1.Series.Add("湿度").Points.RemoveAt(0);
  79.                 }
  80.                 chart1.Series["湿度"].Points.RemoveAt(0);
  81.                 chart1.Invalidate();
  82.             }));
  83.         }
  84.         private void uiButtonOpenSerial_Click(object sender, EventArgs e)
  85.         {
  86.             if (serialPort != null)
  87.             {
  88.                 if (serialPort.IsOpen != true)
  89.                 {
  90.                     //Console.WriteLine(this.uiComboBoxSerial.SelectedItem.ToString());
  91.                     serialPort.PortName = this.uiComboBoxSerial.SelectedItem.ToString();
  92.                     serialPort.Open();
  93.                 }
  94.             }
  95.         }
  96.         private void uiButtonCloseSerial_Click(object sender, EventArgs e)
  97.         {
  98.             if (serialPort != null)
  99.             {
  100.                 serialPort.Close();
  101.             }
  102.         }
  103.     }
  104. }
复制代码

这是部门代码,具体操作有一部门是连接数据库是实现的,下面是如何连接数据库的演示

二.操作解说

1.打开SQL Server客户端

连接数据库之后创建一个表


这边是应为已经有了所以直接右键设置他的值,没有的话在表那右键创建一个表 ,之后就能创建他的表在设计哪里设计它的名字和设计它的浮点型等,从而更好实现自己的设计。

下面是c#中如何连接数据库的展示,在项目那边右键点击增长类函数如下图:


点击增长类后进入增长的界面,增长下面这个

 之后的界面中点击下一步


选择自己的数据库如我这里就是text,之后在选择自己创建的表




成功导入数据库后


之后就能在上读取自己设置的数据内容

三.轻易出现的错误

在C#中实现与数据库的连接以支持环境监控时,可能会碰到多种错误。以下是一些常见的错误及其缘故原由:

  • 连接字符串错误

    • 连接字符串中的服务器名、数据库名、用户名或密码可能不精确。
    • 连接字符串可能利用了错误的提供者名称(如Data Source、Server、Initial Catalog等关键字错误或遗漏)。
    • 如果数据库必要特定的连接参数(如端标语、加密方式等),而这些参数在连接字符串中未精确设置,也会导致连接失败。

  • 网络题目

    • 数据库服务器可能无法从应用程序所在的呆板访问(如防火墙、网络设置等)。
    • 数据库服务器可能未运行或正在维护中。
    • 网络延迟或不稳固可能导致连接超时。

  • 数据库权限题目

    • 利用的数据库用户可能没有充足的权限来执行所需的操作(如读取、写入、执行存储过程等)。
    • 用户可能未被授予连接数据库的权限。

  • 数据库驱动题目

    • 应用程序可能没有安装或引用精确的数据库驱动(如SQL Server的System.Data.SqlClient、MySQL的MySql.Data等)。
    • 利用的数据库驱动版本可能与数据库服务器版本不兼容。

  • 资源限制

    • 数据库服务器可能已达到其最大连接数限制。
    • 应用程序可能没有充足的体系资源(如内存、文件句柄等)来建立新的数据库连接。

  • 超时设置

    • 如果数据库操作必要很长时间才气完成,而连接或命令的超时设置又太短,那么可能会因为超时而失败。

  • 代码错误

    • 在C#代码中可能存在逻辑错误,如实验在未打开的连接上执行命令,或在不存在的表上执行查询等。
    • 代码可能未精确处置惩罚非常,导致连接泄露或资源未精确开释。

  • 数据库维护或升级

    • 数据库可能正在举行备份、规复或其他维护操作,导致连接被拒绝。
    • 数据库可能已升级,而应用程序利用的代码或驱动可能未更新以与新版本兼容。

  • 加密和安全性题目

    • 如果数据库连接必要加密,而连接字符串中未指定加密方式或证书,则连接可能会失败。
    • 安全性设置(如Windows身份验证、SQL Server身份验证、SSL/TLS等)可能设置不精确或未启用。

  • 数据库版本兼容性

    • 应用程序可能利用了某些特定于数据库版本的特性或函数,而这些特性或函数在目标数据库版本中不存在或已更改。

要办理这些题目,通常必要检查连接字符串、网络设置、数据库权限、驱动安装和版本、代码逻辑、超时设置、加密和安全性设置以及数据库版本兼容性等方面。此外,利用日志记录和非常处置惩罚来捕捉和记录错误信息也黑白常紧张的,这有助于快速定位和办理题目。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

王柳

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表