gpt4 book ai didi

c# - 调用类做数据库连接

转载 作者:搜寻专家 更新时间:2023-10-30 21:38:10 24 4
gpt4 key购买 nike

我正在用 C# 编程。我正在尝试制作一个类,当被调用时将创建一个到数据库的连接。

我的数据库连接类在这里:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;

namespace HouseServer
{

class db
{

// Variable to hold the driver and location of database
public static OleDbConnection dbConnection;

// Database connection
public db()
{

// Define the Access Database driver and the filename of the database
dbConnection = new OleDbConnection("Provider=Microsoft.Ace.OLEDB.12.0; Persist Security Info = False; Data Source=Houses.accdb");

// Open the connection
dbConnection.Open();
}
}
}

主要程序在这里:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;

namespace HouseServer
{
class Program : db
{

// List for holding loaded houses
static List<house> houses = new List<house>();

// Variable to hold "command" which is the query to be executed
private static OleDbCommand query;

// Variable to hold the data reader to manipulate data from the database
static OleDbDataReader dataReader;

static void Main(string[] args)
{
// Get the houses in a list
List<house> c = getHousesFromDb();

foreach (house yay in c)
{
// Show each house's full address
Console.WriteLine(yay.house_number + " " + yay.street);
Console.WriteLine(yay.house_town);
Console.WriteLine(yay.postcode);
}

// Readline to prevent window from closing
Console.ReadLine();
}

// Function which loads all of the houses from the database
private static List<house> getHousesFromDb()
{

// Define the query to be executed
query = new OleDbCommand("SELECT * FROM houses", dbConnection);

// Execute the query on the database and get the data
dataReader = query.ExecuteReader();

// Loop through each of the houses
while (dataReader.Read())
{
// Create a new house object for temporarily storing house
house house = new house();

// Create the house that we've just loaded
house.house_id = Convert.ToInt32(dataReader["house_id"]);
house.house_number = Convert.ToInt32(dataReader["house_number"]);
house.street = dataReader["house_street"].ToString();
house.house_town = dataReader["house_town"].ToString();
house.postcode = dataReader["house_postcode"].ToString();

// Now add the house to the list of houses
houses.Add(house);
}

// Return all of the houses in the database as a List<house>
return houses;
}
}
}

我认为放置 class Program : db 会在程序打开时调用 db 构造函数,但是当代码到达 dataReader = query 行时。 ExecuteReader();,出现错误“ExecuteReader:连接属性尚未初始化。”。

我想要实现的只是另一个类中的数据库连接,我可以调用它并可用于我的所有代码。

我是否应该以不同的方式调用数据库类?

最佳答案

不,没有创建 Program 的实例,也没有创建 db 的实例。但是,我强烈建议您彻底改变您的设计:

  • 没有用于数据库连接的静态字段。需要时打开它,使用它,关闭它。您应该很少需要将它存储在局部变量以外的任何地方。
  • 如果可以的话,尽量不要使用静态变量。它们使您的代码更难测试,因为它们代表全局状态——这比本地状态更难推理。在您的程序中,我会完全使用局部变量。
  • 不要对此类事情使用继承 - 您的 Program 类型逻辑上不是从 db
  • 派生的
  • 遵循方法、类和属性的 .NET 命名约定。让您的代码“感觉”起来像地道的 C# 将大大提高其他人的可读性。

关于c# - 调用类做数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7824622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com