c# - 在以下情况下使用静态方法访问数据库是否安全

标签 c# asp.net mysql

我正在将一个 asp 网站升级到 asp.net。我正在尝试采用多种方法。 我的基本 dal 层如下,它返回一个数据表并插入一个给定的查询。

using System;
using System.Configuration;
using System.Data;
using MySql.Data.MySqlClient;

public class mydatautility
{
    public mydatautility()
    {
    }
    public static DataTable Table(string query)
    {
        string constr = ConfigurationManager.ConnectionStrings["db_con"].ConnectionString;
        DataTable table = new DataTable();
        try
        {
            using (MySqlConnection con = new MySqlConnection(constr))
            {
                con.Close();
                MySqlCommand com = new MySqlCommand(query, con);
                MySqlDataAdapter da = new MySqlDataAdapter(com);
                con.Open();
                da.Fill(table);
                con.Close();
                da = null;
                com = null;
                con.Dispose();
            }
        }
        catch (Exception)
        {
        }
        return table;
    }
    public static int Insert_intoemployee(string query)
    {
        string constr = ConfigurationManager.ConnectionStrings["db_con"].ConnectionString;
        int done = 0;
        try
        {
            using (MySqlConnection con = new MySqlConnection(constr))
            {
                MySqlCommand com = new MySqlCommand(query, con);
                con.Open();
                done = com.ExecuteNonQuery();
                con.Close();
                com = null;
                con.Dispose();
            }
        }
        catch (Exception)
        {
        }
        return done;
    }
}

我不确定运行 2 个并发查询时会发生什么。
我如何测试并发问题?

最佳答案

不会有并发问题,因为每个请求都有自己的线程,静态方法对每个线程都有单独的调用堆栈。但是,代码中有一些建议。

using System;
using System.Configuration;
using System.Data;
using MySql.Data.MySqlClient;

public static class mydatautility//change to Utilities
{
    public mydatautility()//not required in this scenario
    {
    }
    public static DataTable Table(string query) //change method name to GetTable
    {
        string constr = ConfigurationManager.ConnectionStrings["db_con"].ConnectionString;
        DataTable table = new DataTable();
        try
        {
            using (MySqlConnection con = new MySqlConnection(constr))
            {
                con.Close();//not required
                using(MySqlCommand com = new MySqlCommand(query, con))
                {
                MySqlDataAdapter da = new MySqlDataAdapter(com);
                con.Open();
                da.Fill(table);
                con.Close();
                da = null;// reduntant, not required
                com = null;// reduntant, not required
                con.Dispose();// reduntant, not required
                }
            }
        }
        catch (Exception)
        {
        }
        return table;
    }
    public static bool InsertEmployee(string query)// consider changing int to bool since you only require result of operation
    {
        string constr = ConfigurationManager.ConnectionStrings["db_con"].ConnectionString;
        int done = 0;
        try
        {
            using (MySqlConnection con = new MySqlConnection(constr))
            {
                Using(MySqlCommand com = new MySqlCommand(query, con))
                {
                con.Open();
                done = com.ExecuteNonQuery();
                con.Close();
                com = null;// reduntant, not required
                con.Dispose();// reduntant, not required
                }
            }
        }
        catch (Exception)
        {
        }
        return done > 0; // checks rows affected greater than 0
    }
}

关于c# - 在以下情况下使用静态方法访问数据库是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15216134/

相关文章:

php - 使用 PHPmyAdmin 加密/解密 MySQL 数据库

MySQL 查询在 Where MONTH(datetime) 中变慢

c# - 从 Windows 窗体控件中按名称查找控件

c# - 角色管理器功能尚未启用

javascript - 在 ASP.Net Web API 的情况下从 angularjs http post 响应中检索值

asp.net - 需要有关将基于 .Net 的应用程序与 Kofax 设备集成的帮助

c# - linQ Where 条件内的条件

c# - 为什么不能在编译时将值类型上的 GetType() 替换为字符串文字?

c# - Asp.Net MVC4 中的复选框列表

mysql。使用空值更新非空列