在另一堂课上阅读文本框

本文关键字:文本 | 更新日期: 2023-09-27 18:33:14

所以我写了一个连接到数据库的程序,一切正常。但是,我想添加一个按钮,按下时会弹出另一个表单,其中包含它所连接的数据库的表和列。我已经通过从文件路径读取并拉出其中的文件夹和内容来执行此操作,但由于某种原因我无法复制它。

当我过去这样做时,我必须创建一个新表单,显然是表单.cs但后来我必须创建另一个类来执行解析。我想我必须做同样的事情,创建一个类来执行sql查询,然后将其显示在form.cs内的列表框中。但是,我遇到的一个问题是从 form1 中读取连接字符串.cs以便我可以使用该连接字符串运行查询。任何帮助/指导将不胜感激。请记住,我对 C# 相当陌生,并在其中使用 sql 语句。

这是我现在拥有的小代码

按钮 在我的表单中单击1.cs

 private void Btn_Click(object sender, EventArgs e)
        {
            var Fun = new DBTableColSearch();
            var DBLocation = Fun.searchMyDataBase();
        }

单独的类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace SQLTool
{
    public class DBTableColSearch
    {

        public string TableName { get; set; }
        public string ColName { get; set; }
        public static SqlConnection myConnection = null; 


        public string searchMyDataBase()

          {
                using (SqlConnection myConnection = new SqlConnection(DBConnectionBox.Text))   
            }
something.ShowDialog();
            return something.userDBLocations;
            }
    }
}

表单.cs类

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SQLTool
{
    public partial class DBSearch : Form
    {
        private DBTableColSearch[] _DBLocations;
        public string userDBlocation;
        public DBSearch(DBTableColSearch[] DBLocations)
        {
            InitializeComponent();
            _DBLocations = DBLocations;
            TableLB.Items.AddRange(_DBLocations.Select(x => x.TableName).Distinct().ToArray());
        }
        private void TableLB_SelectedIndexChange(object sender, EventArgs e)
        {
            ColumnLB.Items.Clear();
            ColumnLB.Items.AddRange(_DBLocations.Where(x => x.TableName == TableLB.SelectedItem.ToString()).ToArray());
        }
    }
}

在另一堂课上阅读文本框

我的理解是,将连接字符串值从一个类(窗体(传递到另一个类(窗体(时遇到问题......

良好做法的一部分是定义稍后可能会在应用程序中更改的字符串值,将其放在配置文件中。(使事情易于管理(

在应用配置上:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    <add key="myCon" value="the connection string"/>
  </appSettings>
</configuration>

我定义了一个名为"myCon"的键,值为"连接字符串"因此,在您的应用程序中,您可以像这样访问myCon:

string connectionString = ConfigurationSettings.AppSettings["myCon"];

如果有警告说它已过时,请改用它:

string connectionString = ConfigurationManager.AppSettings["myCon"];

请注意,这使用 System.Configuration 命名空间,因此请将其添加到 using 语句中。

这样做的好处是,在连接字符串应更新的情况下,无需更改整个代码,并且几乎可以在项目的任何位置访问它。

更新:

由于您提到了从用户输入中获取连接字符串值,因此可以通过多种方式将对象传递给其他类...

1(使用构造函数(你可以传递任何对象,即使它是一种SqlConnection(:

public class Form2 : Form
{
    private string _connection;
    public Form2(string connection)
    {
       _connection = connection; 
    }
}

在 Form1 btn 单击事件上:

Form2 frm2 = new Form2(DBLocation); // var DBLocation = Fun.searchMyDataBase();
frm2.ShowDialog();

2( 公共财产

public class Form2 : Form
{
    public string _connection { get; set; }
    public Form2()
    {
    }
}

在 Form1 btn 单击事件上:

Form2 frm2 = new Form2(); 
var DBLocation = Fun.searchMyDataBase();
frm2._connection = DBLocation;
frm2.ShowDialog();

还有其他方法,但这个例子应该足够了。