简体   繁体   English

如何将wifi扫描数据插入SQL Server表

[英]How to insert wifi scan data into SQL Server table

I have scanned wifi data in C# that I have split into required form MAC, SSID and RSSi. 我已经用C#扫描了wifi数据,并将其分为所需的MAC,SSID和RSSi格式。 When I push a button, the results should be inserted into a SQL Server table that I already created. 当我按下按钮时,结果应该插入到我已经创建的SQL Server表中。 And if I push the button again, it stops inserting. 如果我再次按下该按钮,它将停止插入。 I have tried several methods and could not get it to work, Will appreciate assist 我已经尝试了几种方法,但无法正常工作,不胜感激

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;

namespace WICED_SERIALPORT_TEST
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

       private void button1_Click(object sender, EventArgs e)
       {
           string[] ports = SerialPort.GetPortNames();

           foreach (string port in ports)
           {
               comboBox1.Items.Add(port);
           }
       }

       string t;

       private void button2_Click(object sender, EventArgs e)
       {
           t = comboBox1.Text.ToString();
           sErial(t);
       }

       SerialPort sp;

       void sErial(string Port_name)
       {
           sp = new SerialPort(Port_name, 115200, Parity.None,8, 
     StopBits.One);    
           sp.DataReceived += new 
           SerialDataReceivedEventHandler(DataReceivedHandler);
           sp.Open();
       }

       private void DataReceivedHandler(object sender, 

       SerialDataReceivedEventArgs e)
       {
           SerialPort sp = (SerialPort)sender;
           string msg = string.Empty;
           bool canCont = false;

           while (!canCont)
           {
               msg += sp.ReadLine();

               if (msg.Contains("Scan complete "))
               {
                   canCont = true;
               }
           }

           //string w = sp.ReadLine();
           //string w = sp.ReadExisting();

           // string msg = sp.ReadExisting();

           string[] msgArr = msg.Split('\r');

           Invoke(new Action(() => listBox1.Items.Clear()));

           List<string[]> list = new List<string[]>();
           List<Networks> Scan = new List<Networks>();

           for (int i = 0; i < msgArr.Length; i++)
           {
               list.Add(msgArr[i].Split(new string[] { "  " }, 
   StringSplitOptions.RemoveEmptyEntries));
           }

           for (int i = 0; i < list.Count; i++)
           {
               if (i > 2)
               {
                   if (list[i].Length > 4)
                   {
                        int numOfSplits = 0;
                        List<string> tempList = new List<string>();

                        for (int ii = 0; ii < list[i].Length; ii++)
                        {
                            if (numOfSplits < 6)
                            {
string[] temp1 = list[i][ii].Split(new char[] { ' ' },  
StringSplitOptions.RemoveEmptyEntries);
                                numOfSplits += temp1.Length;

                                for (int iii = 0; iii < temp1.Length; iii++)
                                {
                                    tempList.Add(temp1[iii]);
                                }
                            }
                            else
                            {
                                tempList.Add(list[i][ii]);
                            }
                        }

                        Scan.Add(new Networks()
                        {
                            ID = Convert.ToInt32(tempList[0]),
                            NetworkType = tempList[1],
                            MAC = tempList[2],
                            RSSi = Convert.ToInt32(tempList[3]),
                            Rate = Convert.ToDouble(tempList[4]),
                            Channel = Convert.ToInt32(tempList[5]),
                            Security = tempList[6],
                            SSID = tempList[7],
                        });
                    }
               }
          }

          if (msg != String.Empty)
          {
              Invoke(new Action(() => richTextBox1.AppendText(msg)));
          }

          for (int i = 0; i < Scan.Count; i++)
          {
             Invoke(new Action(() => listBox1.Items.Add(Scan[i].MAC)));
             Invoke(new Action(() => listBox2.Items.Add(Scan[i].RSSi)));
             Invoke(new Action(() => listBox3.Items.Add(Scan[i].SSID)));

             msg = string.Empty;
             list.Clear();
          }
      }

    public SqlConnection con = new SqlConnection(@"Data Source=    
(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\AP_SCAN_DATA.mdf;
 Integrated Security=True");

    private void button3_Click(object sender, EventArgs e)
    {
        using (SqlConnection connection = new SqlConnection(@"Data  Source=
(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\AP_SCAN_DATA.mdf;   
Integrated Security=True"))
        {
           using (SqlCommand command = new SqlCommand())
           {
               command.Connection = connection;            // <== lacking
               command.CommandType = CommandType.Text;
               command.CommandText = "INSERT into LOCATIONSCAN ((Scan[i].SSID), (Scan[i].MAC),(Scan[i].RSSi)) VALUES (@SSID, @MAC, @RSSi)";

               command.Parameters.AddWithValue("@SSID", listBox1);
               command.Parameters.AddWithValue("@MAC", listBox2);
               command.Parameters.AddWithValue("@RSSi",listBox3);

               try
               {
                   connection.Open();
                   int recordsAffected = command.ExecuteNonQuery();
               }
               catch(SqlException)
               {
                   // error here
               }
               finally
               {
                   connection.Close();
               }
           }
       }
    }
 }

Firstly, you have an empty CATCH block that will cause your SqlExceptions to disappear silently. 首先,您有一个空的CATCH块,它将导致您的SqlExceptions静默消失。 Remove the CATCH and the exception will help you. 删除CATCH,该异常将对您有所帮助。 Secondly, your CommandText looks odd, without knowing your database schema I would guess it should be something like this; 其次,您的CommandText看起来很奇怪,不知道您的数据库模式,我想应该是这样的。

command.CommandText = "INSERT into LOCATIONSCAN (SSID, MAC, RSSi) VALUES ('@SSID', '@MAC', '@RSSi')";

Next issue is that you have to specify the property of the listbox that holds the value when adding the parameter. 下一个问题是,添加参数时,您必须指定包含值的列表框的属性。 For example it might be the SelectedValue property. 例如,它可能是SelectedValue属性。

command.Parameters.AddWithValue("@SSID", listBox1.SelectedValue);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM