RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1021591
Accepted
Rekssel
Rekssel
Asked:2020-09-09 10:46:55 +0000 UTC2020-09-09 10:46:55 +0000 UTC 2020-09-09 10:46:55 +0000 UTC

使用 MSSQL 数据库的类的权宜之计

  • 772

创建了一个特殊的帮助类来连接和使用数据库。

如果不需要或没有经验,使用这样的课程是否合理Entity Framework。请大家指出不足并提出其他意见。

类本身:

public class DBHelper
{
        public static string sqlConnectionString = "Data Source=<default>;Initial Catalog=<default>;Persist Security Info=<default>;User ID=<default>;Password=<default>";
        public bool connectionOnline = false;
        public SqlConnection sqlConnection = null;
        public DBHelper(string _DataSource, string _InitialCatalog, string _User, string _Password)
        {
                string AssebledConnectionString =
                        "Data Source=" + _DataSource + ";" +
                        "Initial Catalog=" + _InitialCatalog + ";" +
                        "Persist Security Info=True;" +
                        "User ID=" + _User + ";" +
                        "Password=" + _Password;
                connectionOnline = false;
                InitializeConnection(AssebledConnectionString);
        }
        public DBHelper()
        {
                connectionOnline = false;
                InitializeConnection(sqlConnectionString);
        }
        public DBHelper(string sqlCustomConnectionString = null)
        {
                connectionOnline = false;
                InitializeConnection(sqlCustomConnectionString);
        }
        public void Dispose()
        {
                this.DisengageConnection();
                sqlConnection = null;
        }
        void InitializeConnection(string sqlCustomConnectionString = null)
        {
                try
                {
                        if ((connectionOnline) || (sqlConnection != null)) return;
                        sqlConnection = new SqlConnection(sqlCustomConnectionString ?? sqlConnectionString);
                        sqlConnection.Open();
                        connectionOnline = true;
                }
                catch
                {
                        connectionOnline = false;
                        //Не удалось соединиться с базой данных
                }
        }
        void DisengageConnection()
        {
                if ((!connectionOnline) || (sqlConnection == null)) return;
                sqlConnection.Close();
                connectionOnline = false;
        }
        public SqlCommand GetStoredProc(string procedureName)
        {
                SqlCommand sqlCommand = new SqlCommand(procedureName, sqlConnection)
                {
                        CommandType = CommandType.StoredProcedure
                };
                return sqlCommand;
        }
        public DataSet GetDataSet(SqlCommand sqlCommand)
        {
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
                DataSet dsTable = new DataSet();
                sqlDataAdapter.Fill(dsTable);
                return dsTable;
        }
        public DataTable GetResultTable(SqlCommand sqlCommand, int dataTableNumber = 0)
        {
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
                DataSet dsTable = new DataSet();
                sqlDataAdapter.Fill(dsTable);
                if ((dsTable.Tables.Count > 0) && (dsTable.Tables.Count - 1 >= dataTableNumber))
                {
                        return dsTable.Tables[dataTableNumber];
                }
                else
                {
                        return new DataTable();
                }
        }        
}    

使用存储过程的示例:

DBHelper db = new DBHelper();
SqlCommand sqlCommand = db.GetStoredProc("<имя хранимой процедуры>");
sqlCommand.Parameters.AddWithValue("@<имя параметра 1>",<param1_value>);
sqlCommand.Parameters.AddWithValue("@<имя параметра 2>",<param2_value>);
//...
sqlCommand.Parameters.AddWithValue("@<имя параметра N>",<paramN_value>);
//далее действия в зависимости от характера хранимой процедуры
//либо простое исполнение
sqlCommand.ExecuteNonQuery();
//либо получение данных
DataTable dataTable = db.GetResultTable(sqlCommand);
c#
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Streletz
    2020-09-09T14:13:59Z2020-09-09T14:13:59Z

    如果不需要或没有使用实体框架的经验,是否建议使用类似的类。

    如果无法使用实体框架(例如,您有一个古老的项目)或项目非常非常简单,则可以使用此类类。尽管在后一种情况下,它是非常值得商榷的。

    至于缺乏经验,作为使用此类解决方案的论据,这根本不算什么。实体框架,具有 C# 和 DBMS 的知识,很容易掌握。

    至于类本身,它是非常可取的:

    • 简化前端。

    本质上,您的类只创建一个连接并提供对基于它的低级对象的访问。因此,即使在您的示例中,几乎所有工作仍然需要手工完成。

    因此,有必要简化方法调用,以便它们根据数据库对象的名称及其参数立即返回完成的结果,而无需额外的操作。或者编写一个像存储库一样的包装类来解决低级任务。

    • 使类更通用。

    MS SQL 本身并不坏。只是,如果我没记错的话,它从来都不是 .NET 的唯一 DBMS。另外,如果早些时他,或许可以称得上是一种行业标准的角色,现在情况已经发生了很大的变化。许多 C# 项目使用不是来自 MS 甚至来自 Oracle(例如 PostgreSQL)的 DBMS。

    因此,与 DBMS 一起工作的框架的狭隘专业化(因为您决定实际编写自己的),虽然它可能在“核心”项目中成为优势,但总的来说,这些项目将使用它有限的。

    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5