所以我编写了一个连接数据库的程序,一切都很好。但是,我想在按下时添加一个按钮,弹出另一个表单,其中包含连接到的DB的表和列。我已经在传递中完成了这个操作,从文件路径读取并拉出文件夹和内部的东西,但由于某种原因我不能复制它。
当我在过去做的时候,我不得不创建一个新表单,显然是form.cs但是我必须创建另一个类来进行解析。我想我必须做同样的事情,创建一个执行sql查询的类,然后在form.cs里面的列表框中显示它。但是,我遇到的一个问题是从我的form1.cs读取连接字符串,所以我可以使用该连接字符串运行查询。任何帮助/指导将不胜感激。请记住,我对C#很新,并在其中使用sql语句。
这是我现在的小代码
按钮单击我的form1.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;
}
}
}
Form.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());
}
}
}
答案 0 :(得分:1)
我理解的方法是将连接字符串值从一个类(表单)传递给另一个类(表单)时出现问题...
良好做法的一部分是定义字符串值,以后可能会在应用程序中将其置于配置文件中。 (使事情易于管理)
在你的App.config上:
<?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();
还有其他方法,但这些例子应该足够了。