インスタンス化されたオブジェクトパラメータによるMySQLクエリ例の説明

インスタンス化されたオブジェクトパラメータによるMySQLクエリ例の説明

この記事では、オブジェクト パラメータをインスタンス化して MySQL でデータをクエリする方法を紹介します。 (ソースコード) には一定の参考価値があります。困っている友人が参照できます。お役に立てれば幸いです。

パブリック静的文字列 QueryByEntity<T>(T t) ここで T : new()
{ 文字列 resultstr = string.Empty;
  MySqlDataReader リーダー = null; 試す
  {
    型 type = typeof(T);
    PropertyInfo[] properties = type.GetProperties(); string select = string.Format("Select * from {0} {1}", type.Name, "{0}"); string where = string.Empty; foreach (propertyInfo property in properties)
    { var value = t.GetPropertyValue<T>(property); if (value != null && !value.Equals(property.GetDefaultValue()))
      { if (string.IsNullOrEmpty(where))
        { where = string.Format(" where {0}='{1}' ", property.Name, value);
        } それ以外
        { where = string.Format("{0} and {1} = '{2}'", where, property.Name, value);
        }
      }
    } select = string.Format(select, where);
 
    MySqlConnection connection = OpenConnection(); if (connection == null) return resultstr;
    MySqlCommand _sqlCom = 新しい MySqlCommand(選択、接続);
    リーダー = _sqlCom.ExecuteReader();
    リスト<T> tList = 新しいリスト<T>(); while (reader.Read())
    {
      T t1 = new T(); foreach (プロパティ内のPropertyInfoプロパティ)
      { if (!string.IsNullOrEmpty(reader[property.Name].ToString()))
        {
          property.SetMethod.Invoke(t1、新しいオブジェクト[] { reader[property.Name] });
        }
      }
      tList.Add(t1);
    }
    結果str = JsonConvert.SerializeObject(tList);
  } catch (例外例)
  {
    Logging.Error(string.Format("データベースのクエリに失敗しました、{0}", ex.Message));
  } ついに
  { if (リーダー != null)
    {
      リーダー.Close();
      リーダーを破棄します。
    }
  } 結果文字列を返します。
}内部静的クラス ObjectExtend
{ パブリック静的オブジェクト GetPropertyValue<T>(このオブジェクト obj、PropertyInfo プロパティ)
  {
    型 type = typeof(T);
    プロパティ情報 propertyInfo = type.GetProperty(property.Name); if (propertyInfo != null)
    { propertyInfo.GetMethod.Invoke(obj, null) を返します。
    } null を返します。
  } パブリック静的オブジェクト GetDefaultValue(この PropertyInfo プロパティ)
  { property.PropertyType.IsValueType を返します。Activator.CreateInstance(property.PropertyType) : null;
  }
}

パラメータをインスタンス化し、プロパティに値を割り当て、オブジェクトをパラメータとして渡し、リフレクションを通じてオブジェクト名、列名、列値を取得します。オブジェクト名はテーブル名と一致している必要があり、属性は列名と一致している必要があります。 123WORDPRESS.COM をご愛顧いただきありがとうございます。

以下もご興味があるかもしれません:
  • pymysqlクエリステートメントで in を使用する際のパラメータの受け渡しの問題について簡単に説明します。
  • Limitパラメータを使用してMySQLクエリを最適化する方法
  • MySQL 8.0 のメモリ関連パラメータの概要
  • Python MySQLのパラメータ化の説明
  • SQL 文を実行するときの Python MySQLdb パラメータ渡し方法
  • Python MySQL の日付時刻の書式設定をパラメータ操作として
  • MYSQL設定パラメータの最適化の詳細な説明
  • MySQL パフォーマンスの包括的な最適化方法リファレンス、CPU、ファイルシステムの選択から mysql.cnf パラメータの最適化まで
  • MySQL 5.6 での table_open_cache パラメータの最適化と適切な構成の詳細な説明
  • MySQL パラメータ関連の概念とクエリ変更方法

<<:  WeChatアプレット開発の実践スキル:データの転送と保存

>>:  Windows で Graphviz をインストールして開始する方法のチュートリアル

推薦する

Alibaba Cloud Ubuntu 16.04でpptpdサービスを構築する方法

1. PPTP VPNを構築するには、ポート1723とGREプロトコルを開く必要があります。 1. ...

XHTML Web ページ チュートリアル

<br />この記事は主に、初心者にXHTMLの基本知識と、XHTMLとHTMLの違いを...

MySQLでよく使われる文字列関数トップ10の詳細な説明

こんにちは、みんな!技術の話ばかりで髪は切らないトニーです。データベース関数は、何らかの機能を持ち、...

IE6 の select を div でカバーできないバグの解決方法

div を使用してマスクを作成したり、ポップアップ ウィンドウをシミュレートしたりします。ただし、I...

光沢のある輝くウェブサイトデザインの感動的なデザイン例

このコレクションには、あなたのデザインアイデアにインスピレーションを与える、輝いて光沢のある、優れた...

MySQL テーブル自動増分 ID オーバーフロー障害レビュー ソリューション

問題: MySQLテーブル内の自動増分IDのオーバーフローによりビジネスブロックが発生した背景: t...

MySQLデータベーストリガーの詳細な説明

目次1 はじめに2 トリガーの紹介3 トリガーを作成する4 トリガーを表示5. トリガーの削除6 結...

Flask と Vue のフロントエンドとバックエンドを分離したプロジェクト展開のサンプル コード

以前、プロジェクトを開発しました。バックエンドのインターフェースを書くために Flask フレームワ...

MySQL テーブル全体の暗号化ソリューション keyring_file の詳細な説明

例示するMySql Community Edition は、5.7.11 以降、テーブルベースのデー...

nginx プロキシ サーバーで双方向証明書検証を構成する方法

証明書チェーンを生成するスクリプトを使用して、ルート証明書、中間証明書、および 3 つのクライアント...

MySQLに必要な共通知識のまとめ

目次主キー制約一意の主キー非 Null 制約デフォルトの制約外部キー制約1NF 2NF 3NFデータ...

HTML コード作成ガイド

共通コンベンションタグ自己終了タグ。閉じる必要はありません (例: img input br hr ...

MySQLでユーザーを作成し、権限を管理する方法

1. ユーザーとパスワードの作成方法1. MySQLデータベースに入る mysql> mysq...

MySQL のバックアップとリカバリの設計アイデア

背景まず、背景を説明します。ある制約により、当社の現在のバックアップ戦略では、1 日おきにフル バッ...

DeepinでPyenvをインストールする手順

序文これまでは、/bin/ ディレクトリのソフトリンクを変更して Python のバージョンを切り替...