如何在c#中将数据从一个表单传输到另一个表单



我想通过其他形式从我的dbconnect类访问openConnection,但它无法正常工作。我必须将整个Ooppenconnection复制粘贴到另一个页面,以便他们访问它。

类dbconnect

class DB_Connect
{
private MySqlConnection connection;
private string server;
private string database;
private string uid;
private string password;
//Constructor
public DB_Connect()
{
Initialize();
}
//Initialize values
private void Initialize()
{
server = "localhost";
database = "xyz";
uid = "root";
password = "";
string connectionString = $"datasource=127.0.0.1;port = 3306; SERVER={server}; DATABASE={database}; USERNAME={uid}; PASSWORD={password};sslmode=none";
connection = new MySqlConnection(connectionString);
}
//open connection to database
public bool OpenConnection()
{
try
{
connection.Open();
return true;
}
catch (MySqlException ex)
{
switch (ex.Number)
{
case 0:
MessageBox.Show("Cannot connect to server. Contact administrator");
break;
case 1045:
MessageBox.Show("Invalid username/password, please try again");
break;
}
return false;
}
}
//Close connection
public bool CloseConnection()
{
try
{
connection.Close();
return true;
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message);
return false;
}
}
}

MyForm 2点击数据显示在dataGridView 上

private void display_record_Click(object sender, EventArgs e)
{
DB_Connect connect = new DB_Connect(); // I believe this part does not work
string show_query = "SELECT * FROM testing_tb"; 
if (connect.OpenConnection() == true)
{
using (MySqlCommand cmd_DB = new MySqlCommand(show_query, connection))
{
try
{
using (MySqlDataReader reader = cmd_DB.ExecuteReader())
if (reader.HasRows)
{
dt = new DataTable();
dt.Load(reader);
dataGridView1.DataSource = dt;
}
else
{
MessageBox.Show("No data record detected");
}
connect.CloseConnection();
}
catch (Exception ex)
{
MessageBox.Show("Could not connect to database!n" + ex, "Database Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}// end of catch
} // end of MySQLCommand
} // end of connection check
}

我想从我的dtconnect class访问数据,这样我就不必在要打开连接的每个新表单中粘贴public bool OpenConnection(){}

错误:无法连接到数据库,连接必须有效且打开,等等。

如果你真的希望连接在任何地方都可用,你可以使用这个:

public static class Connection
{
private const string ConnectionString = "YOUR CONNECTION";
public static System.Data.SqlClient.SqlConnection Conn { get; private set; } = null;
public static void Open()
{
try
{
Conn = new System.Data.SqlClient.SqlConnection(ConnectionString);
Conn.Open();
}
catch { System.Windows.MessageBox.Show("Can't connect to the server, please check if you have an internet connection."); }
}
public static void Close() { Conn.Close(); }
}

不建议这样做,因为你的连接将一直处于打开状态,所以你应该这样做:

public static class Connection
{
private const string ConnectionString = "YOUR CONNECTION";
public static System.Data.SqlClient.SqlConnection Conn { get; private set; } = null;
public static void Create() { Conn = new System.Data.SqlClient.SqlConnection(ConnectionString); }
public static void Open()
{
try { Conn.Open(); }
catch { System.Windows.MessageBox.Show("Can't connect to the server, please check if you have an internet connection."); }
}
public static void Close() { Conn.Close(); }
}

您可以在需要时打开和关闭连接。因此,基本上,当您在使用查询时打开连接时,您将使用Connection.Open()Connection.Close()。如果该类正在使用您的表单,那么现在可以从任何地方访问它。

以下是有关连接状态的链接:https://softwareengineering.stackexchange.com/questions/142065/creating-database-connections-do-it-once-or-for-each-query

相关内容

最新更新