winform 连接数据库以及显示查询结果

Posted Lee597

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winform 连接数据库以及显示查询结果相关的知识,希望对你有一定的参考价值。

  首先,开始之前,需要知道作为.NET框架最重要的组件之一,ADO.NET扮演着应用程序与数据交互的重要的角色。

  简单的讲,ADO.NET是一组允许.NET开发人员使用标准的,结构化的,甚至无连接的方式与数据交互的技术。对于ADO.NET来说,可以处理数据源是多样的。可以是应用程序唯一使用的创建在内存中数据,也可以是与应用程序分离,存储在存储区域的数据(如文本文件、XML、关系数据库等)。

  具体来说,ADO.NET 对 Microsoft SQL Server 和 XML 等数据源以及通过 OLE DB 和 XML 公开的数据源提供一致的访问。数据共享使用者应用程序可以使用 ADO.NET 来连接到这些数据源,并检索、处理和更新所包含的数据。

  作为.NET框架的重要组成部分,ADO.NET 类封装在 System.Data.dll 中,并且与 System.Xml.dll 中的 XML 类集成。当编译使用 System.Data 命名空间的代码时,需要引用System.Data.dll 和 System.Xml.dll。

  有关ADO.NET更多的内容,可以参考ADO.NET - 随笔分类 - 木小楠 - 博客园 (cnblogs.com)。写的很好,十分感谢。

 

  正式开始,使用 SqlConnection 来连接数据库,使用 DataGridView 来显示查询的结果。

 

1、获取连接数据库所需的字符串,包括服务器名称,数据库名称,用户名以及密码,可在配置文件中配置,或直接在代码里写死

 

  在配置文件 App.config 中配置的代码:

  <configuration>
  <appSettings>
  <add key="connectionstring" value="server=192.168.3.201;database=Nine_Xhs;uid=sa;pwd=Nine!2021;"/>
  </appSettings>
  </configuration>

 

2、获取数据库连接对象

  public static SqlConnection CreateSqlConn()
  
    //从配置文件 App.config 中获取数据库连接字符串
    var conStr = ConfigurationManager.AppSettings["connectionstring"];
    SqlConnection conn = new SqlConnection(conStr);
    return conn;
  

 

3、测试数据库的连通性

  private void button1_Click(object sender, EventArgs e)
  
    try
    
      if (conn.State == ConnectionState.Closed)
        
          conn.Open();
        

      MessageBox.Show("连接成功","数据库连接测试");
    
    catch (Exception ex)
    
      MessageBox.Show("连接失败:"+ ex.Message, "数据库连接测试");
    
  

 

4、在窗口中添加 DataGridView 对象,用于显示数据

5、生成数据查询SQL,并将查询结果绑定到 DataGridView 上,在画面进行显示】

  private void button2_Click(object sender, EventArgs e)
  
    var dataCnt = numericUpDown1.Value;
    dataCnt = dataCnt > 0 ? dataCnt : 5;

    string sql = "Select Top " + dataCnt + " UserId,RedId,NickName,[Desc],Location From UserInfo ";
    var ds = Query(sql);
    if (ds.Tables?.Count > 0)
    
      var dt = ds.Tables[0];

      //直接绑定DataTable
      dataGridView1.DataSource = dt;

      ////绑定对象列表
      //List<UserInfo> userList = new List<UserInfo>();
      //if (dt.Rows?.Count > 0)
      //
        // foreach (DataRow row in dt.Rows)
        //
          // UserInfo user = new UserInfo
          //
            // UserId = row["UserId"] + "",
            // RedId = row["RedId"] + "",
            // NickName = row["NickName"] + "",
            // Desc = row["Desc"] + "",
            // Location = row["Location"] + "",
          // ;

          // userList.Add(user);
        //
      //

    //dataGridView1.DataSource = userList;
    
  


  public DataSet Query(string sqlStr)
  
    DataSet ds = new DataSet();
    try
    
      if (conn.State == ConnectionState.Closed)
      
        conn.Open();
      

      SqlDataAdapter command = new SqlDataAdapter(sqlStr, conn);
      command.Fill(ds);
    
    catch (Exception ex)
    
      throw new Exception(ex.Message);
    

    return ds;
  

 

PS:DataGridView 对象绑定的数据源,DataTable 以及 对象List 都是可以的,显示的效果是一样的。

 

还有更多相关连接应用:

winform查询数据库 - Lee597 - 博客园 (cnblogs.com)

winform 打开excel文件并显示在dataGridView上 - Lee597 - 博客园 (cnblogs.com)

winform 根据dataGridView中的值,来循环使用 - Lee597 - 博客园 (cnblogs.com)

 

 

本文还参考了

【WinForm】 自学笔记二:连接数据库以及查询结果显示 - Nine_Jason - 博客园 (cnblogs.com)

 

特此感谢

 

具有多个搜索参数和显示结果的 PHP/HTML/MySQL 数据库查询

【中文标题】具有多个搜索参数和显示结果的 PHP/HTML/MySQL 数据库查询【英文标题】:PHP/HTML/MySQL Database Query with multi search parameters and display results 【发布时间】:2018-02-09 20:46:20 【问题描述】:

我正在使用 html 构建自定义部件构建器表单,所有项目都在 MySQL 上。在表单上有多个下拉菜单和按钮以及一个文本输入框。我想知道如何连接表单查询MySQL数据库,然后将页面上的项目显示在一个框中。我想在表单下的一个框中显示查询结果。

【问题讨论】:

阿贾克斯?您是否尝试将表单中的信息发送到您的 MySQL 数据库? 尝试使用AJAX,然后使用document.getElementById('yourID').innerHTML = ...;将结果写入HTML DOM。那么您的盒子将是一个&lt;div id='yourID'&gt;,其 ID 在 JavaScript 中指定。 所以客户填写表格,然后显示零件编号和价格 然后尝试使用 AJAX。它可以与服务器上的 PHP 文件通信,然后可以查询 MySQL 请求。 好的,我是新手,所以可能需要一段时间。谢谢! 【参考方案1】:

通过使用 AJAX,您可以与服务器上的 PHP 文件进行通信。然后,这可以进行 MySQL 查询并回显您希望从数据库接收的数据。 使用 JavaScript,您可以格式化此返回值并更改 boxinnerHTML &lt;div&gt;

HTML

<form>... Your form ...</form>
<div id="yourDiv"></div>

JavaScript

var request = $.ajax(
    url: "LINK_TO_YOUR_PHP_FILE.php",
    type: "post",
    data: YOUR_PARAM_DATA_FROM_HTML_FORM
);

request.done(function (response) 
    // Do something with the response...
    document.getElementById("yourDiv").innerHTML = response;
);

PHP

$conn = new mysqli("localhost", "DB_USERNAME", "DB_PASSWORD", "DB_NAME");
$sql = "SELECT * FROM your_table WHERE ...";
$result = $conn->query($sql);

while($row = $result->fetch_assoc()) 
   echo $row;


$conn->close();

【讨论】:

【参考方案2】:

第一步:在body元素的底部添加Jquery。不要使用 Jquery SLIM 版本。

   <script src="/script/jquery-3.2.1.min.js" type="text/javascript" charset="utf-8"></script>

第 2 步:确保您的数据包含在表单元素中,并且表单中有一个按钮。

<form>
<input name="stuff" value="">
<button></button
</form>

第 3 步:收集信息并使用 ajax 将其发送到 php 文件。

$("form").submit(function(event)

            event.preventDefault(); 

alert("click");

        var data = $("form").serialize(); 

                $.ajax(
                type:'POST',

                url:'yourphppage.php',
                data: data,
                beforeSend: function()  

                    alert(data);        

                ,
                success:function(msg)

                    alert(msg);


                    if (!$.trim(msg))   

                                alert("no message");

                    else if($.trim(msg) == '1')

                            alert("logged in");
                            //window.location.href = "/index.php";

                    else if($.trim(msg) == '0')

                            alert("email taken");

                    else

                        alert("error");
                    

                    

            ); 
    );

*序列化数据将获取输入元素的名称并分配值。然后它会发送一串数据。比如'stuff=inputevalue?morestuff=inputvalue'。

第 4 步:创建一个接收数据、将数据存储在数据库中并向您发送响应的 php 文件。

这是一个登录页面的示例,它需要一个 post 或 die 子句,但要测试这个很容易,并且显示了很多如何测试东西的示例。

<?php
date_default_timezone_set('America/Los_Angeles');
    session_start();

require("db_connect.php");



    // If form submitted, insert values into the database.


        $email = stripslashes($_POST['stuff']); // removes backslashes

        // $email = stripslashes('aaron@treaze.com');

        $email = filter_var($email, FILTER_SANITIZE_EMAIL);

        $email = mysqli_real_escape_string($conn,$email); //escapes special characters in a string

        $password = stripslashes($_POST['password']);

        // $password = stripslashes("hackme69");

        $password = mysqli_real_escape_string($conn,$password);

        //echo $password."<br><br>";

        //echo $email."<br><br>";


        //Checking is user existing in the database or not

       // $query = "SELECT * FROM `users` WHERE email='$email'";
        $query = sprintf("SELECT * FROM users WHERE email='%s'", $email);

        $result = mysqli_query($conn,$query) or die(mysql_error());


        if($result) 

            while($obj = $result->fetch_object())

            $existingHashFromDb = $obj->password;
            $role = $obj->role;

        

    if(password_verify($password, $existingHashFromDb))

            $_SESSION['email'] = $email;
            $_SESSION['role'] = $role;

        echo "1";


    else


        echo "0";

    



else



    echo "No input";


      




?>

第 5 步:确保您的数据库连接在同一个文件目录中,并且看起来像这样。

<?php

/* Database connection start */
$servername = "localhost";
$username = "******";
$password = "*******";
$dbname = "********";


// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) 
    die("Connection failed: " . mysqli_connect_error());



?>  

最后一步:设置数据库以接收值。

总之,有很多例子可以说明该做什么。它给了你这个概念。但是,如果这对您来说是新的。我的建议是从非常小的和基本的开始,然后建立起来。一旦你掌握了这个概念,你就会像专业人士一样 ajaxing 周围的一切。

我还想补充一点... ajax 有很多方法。如果您想从一个 ajax 调用中接收多个响应,您将需要学习如何将信息转换为 JSON 并将结果存储在变量 Array 中。然后您可以访问多个响应。

这是获取多个值并在一个响应中发送它们的 PHP 代码示例。

<?php

session_start();
date_default_timezone_set('America/Los_Angeles');


include_once("db_connect.php");


$getusername = $_GET["username"];

$getusername = $_SESSION['username'];



$results = $mysqli->query("SELECT * FROM users4 WHERE username= '".$getusername."' ");

if($results) 

while($obj = $results->fetch_object())


$username=$obj->username;
$firstName=$obj->name;  
$lastName=$obj->lastName;
$email=$obj->email;
$dob=$obj->dob;





echo json_encode(array("firstName" => $firstName, "lastName" => $lastName, "email" => $email, "dob" => $dob, "username" => $getusername));


?> 

这是一个带有 JSON 的 AJAX 示例。

  function initiateCall() 
    //  alert("sending text to" + $("#phone_number").val() );

    $.post("call.php",  phone_number : $("#phoneNumber").val() , 
      function(data)  showCodeForm(data.verification_code); , "json");




  

你必须弄清楚什么是最适合你的。我希望这能给你一些方向。

【讨论】:

以上是关于winform 连接数据库以及显示查询结果的主要内容,如果未能解决你的问题,请参考以下文章

winform里 在textbox里输入要查询的内容 比如分类名 点击Button后 怎样将所查询的结果显示在label上

C#Winform中,我在查询数据时等待时间过长,想用一个进度条显示机器正在查询,请问如何实现?

C#winform如何实现数据库查询并分页

oracle中的多表查询和子查询以及一些注意事项

数据库之多表查询

mysql只能取出一条记录为啥不显示