![](/img/trans.png)
[英]How do I optimize my Sql query when calling form ASP .NET Windows for Application?
[英]How do I create a class with SQL connection and query functions and calling it to my windows form buttons?
我想创建一个具有SQL连接和功能(如插入,选择,删除查询)的类,并希望将其调用到表单(按钮等)中。
我不知道是否有可能或者这样做有一些方法...
我已经做了一些研究,并在类SQL连接上提出了这段代码,但不确定是否正确。
提前非常感谢您。 我是一个初学者,想了解有关C#的更多信息。
任何类型的响应表示赞赏。 谢谢
对不起,我的英语不好
using System.Data.SqlClient;
class SqlConnClass
{
public static SqlConnection GetConnection()
{
string str = "Data Source=localhost;Initial Catalog=kwem;Integrated Security=True;";
SqlConnection conn = new SqlConnection(str);
conn.Open();
return conn;
}
你近了! 您可能想从您的方法中删除“ conn.Open()”,因为您可以为查询打开它。 (请记住将其关闭或放入using语句中!)
public static void UpdateDB(string valToUpdate)
{
SQLConnection conn = GetConnection();
using (conn)
{
SQLCommand updateCommand = new SQLCommand(GetConnection(), "Update Table
Set Val = @newValue");
updateCommand.Parameters.AddWithValue("@newValue", valToUpdate);
conn.Open();
updateCommand.ExecuteNonQuery();
}
}
然后,您将对任何其他种类的DB函数执行相同的操作。
没错,但是; 如果您的字符串str不起作用。 请尝试以下方法:
string str = "Data Source=local host ;Initial Catalog=kwem;Integrated Security=True"
另外,您需要定义sql表,然后选择数据库。
您走在正确的道路上。
您所指的是数据访问层,简称DAL。
它是n层体系结构模型的一部分 (在简单版本中,分为3层-表示层,业务逻辑和数据访问层)。
基本概念是将表示,逻辑和数据分为应用程序的3个不同部分。
至于数据访问层,通常会有一个静态或单例类负责将业务层连接到数据。 此类将包含CRUD操作的方法-创建,读取,更新和删除数据。 您将需要为每个操作和每个数据实体创建方法。
我一直看到的一种方法是:
public static class DAL
{
private static string _ConnectionString = null;
static DAL() // A static constructor to initialize the connection string
{
_ConnectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
}
public static DataSet GetCategories()
{
var ds = new DataSet();
var sql = "SELECT * FROM Categories";
using (var con = new SqlConnection(_ConnectionString))
{
using (var cmd = new SqlCommand(sql, con))
{
using (var adapter = new SqlDataAdapter(cmd))
{
adapter.Fill(ds);
}
}
}
return ds;
}
public static int DeleteCategory(int categoryId)
{
int rowsEffected = 0;
var sql = "DELETE FROM Categories WHERE Id = @Id";
using (var con = new SqlConnection(_ConnectionString))
{
using (var cmd = new SqlCommand(sql, con))
{
cmd.Parameters.Add("@Id", SqlDbType.Int).Value = categoryId;
con.Open();
cmd.ExecuteNonQuery();
}
}
return rowsEffected;
}
}
等等。 如您所见,有很多重复的代码。
这意味着需要更长的代码,更广泛的维护,并且如果由于某种原因您将要支持其他类型的数据库(例如迁移到MySql,Oracle或其他数据库),则必须非常努力地更改DAL中所有特定于供应商的类( SqlConnection,SqlCommand等)。
这些问题正是我编写ADONETHelper的原因。 我已经使用了几年(大多数情况下是以不同的形式使用),现在我感觉它已经成熟到可以公开发行的地步。 它目前已获得MIT许可,这是完全免费的,您可以下载副本并根据需要进行更改。
如果您选择使用它,则您的DAL类可能看起来像这样:
public static class DAL
{
private static IDBHelper _DB;
static DAL() // A static constructor to initialize _DB
{
// initialize connection string from config file
var connectionstring = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
_DB = DBHelperFactory.GetInstance(DataBaseType.SQLServer, connectionstring);
}
public static DataSet GetCategories()
{
var sql = "SELECT * FROM Categories";
return _DB.FillDataSet(sql, CommandType.Text);
}
public static int DeleteCategory(int categoryId)
{
var sql = "DELETE FROM Categories WHERE Id = @Id";
var param = _DB.CreateParameter("@Id", ADONETType.Int, categoryId);
return _DB.ExecuteNonQuery(sql, CommandType.Text, param);
}
}
如您所见,代码重复降至最低限度,并且迁移到其他数据库就像更改静态构造函数以使用其他DataBaseType
一样简单。 当然,如果您使用的是特定于供应商的sql,则也必须更改它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.