-1

メインの最初の質問コードを参照すると、実行時にユーザーに従業員名を入力してもらい、ユーザーが入力したこの名前を取得して、それを emp テーブルの e_name と比較します。存在する場合はすべて表示しますその従業員の情報、どうすればこれを達成できますか?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace ConnectCsharppToMySQL
{
    public  class DBConnect
    {
        private MySqlConnection connection;
        private string server;
        private string database;
        private string uid;
        private string password;

        string name;

        //Constructor
        public DBConnect()
        {
            Initialize();
        }

        //Initialize values
        private void Initialize()
        {
            server = "localhost";
            database = "test";
            uid = "root";
            password = "";
            string connectionString;
            connectionString = "SERVER=" + server + ";" + "DATABASE=" +
            database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";

            connection = new MySqlConnection(connectionString);
        }

        //open connection to database
        private bool OpenConnection()
        {
            try
            {
                connection.Open();
                return true;
            }
            catch (MySqlException ex)
            {
                //When handling errors, you can your application's response based 
                //on the error number.
                //The two most common error numbers when connecting are as follows:
                //0: Cannot connect to server.
                //1045: Invalid user name and/or password.
                switch (ex.Number)
                {
                    case 0:
                        MessageBox.Show("Cannot connect to server.  Contact administrator");
                        break;

                    case 1045:
                        MessageBox.Show("Invalid username/password, please try again");
                        break;
                }
                return false;
            }
        }

        //Close connection
        private bool CloseConnection()
        {
            try
            {
                connection.Close();
                return true;
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
        }

        //Insert statement
        public void Insert()
        {
            string query = "INSERT INTO emp (e_name, age) VALUES('Pooja R', '21')";

            //open connection
            if (this.OpenConnection() == true)
            {
                //create command and assign the query and connection from the constructor
                MySqlCommand cmd = new MySqlCommand(query, connection);

                //Execute command
                cmd.ExecuteNonQuery();

                //close connection
                this.CloseConnection();
            }
        }

        //Update statement
        public void Update()
        {
            string query = "UPDATE emp SET e_name='Peachy', age='22' WHERE e_name='Pooja R'";

            //Open connection
            if (this.OpenConnection() == true)
            {
                //create mysql command
                MySqlCommand cmd = new MySqlCommand();
                //Assign the query using CommandText
                cmd.CommandText = query;
                //Assign the connection using Connection
                cmd.Connection = connection;

                //Execute query
                cmd.ExecuteNonQuery();

                //close connection
                this.CloseConnection();
            }
        }    

        //Select statement
        public List<string>[] Select()
        {

            string query = "SELECT * FROM emp where e_name=(/*I WANT USER ENTERED NAME TO GET INSERTED HERE*/)";


            //Create a list to store the result
            List<string>[] list = new List<string>[3];
            list[0] = new List<string>();
            list[1] = new List<string>();
            list[2] = new List<string>();

            //Open connection
            if (this.OpenConnection() == true)
            {
                //Create Command
                MySqlCommand cmd = new MySqlCommand(query, connection);
                //Create a data reader and Execute the command
                MySqlDataReader dataReader = cmd.ExecuteReader();

                //Read the data and store them in the list
                while (dataReader.Read())
                {
                    list[0].Add(dataReader["e_id"] + "");
                    list[1].Add(dataReader["e_name"] + "");
                    list[2].Add(dataReader["age"] + "");
                }

                //close Data Reader
                dataReader.Close();

                //close Connection
                this.CloseConnection();

                //return list to be displayed
                return list;
            }
            else
            {
                return list;
            }
        }


        public static void Main(String[] args)
        {

            DBConnect db1 = new DBConnect();
            Console.WriteLine("Initializing"); 
            db1.Initialize();

             Console.WriteLine("Search :");
             Console.WriteLine("Enter the employee name");
             db1.name = Console.ReadLine();
             db1.Select();

                      Console.ReadLine();

        }
    }

}
4

2 に答える 2

0

MySqlParameterを次のように使用します:

using (MySqlConnection connection = new MySqlConnection(connectionString))
{
    connection.Open();
    using (MySqlCommand command = new MySqlCommand ("SELECT * FROM emp where e_name =@Name", connection))
    {
        //
        // Add new SqlParameter to the command.
        //
        command.Parameters.AddWithValue("@Name", name);// name is get from console read line. 

        //
        // Read in the SELECT results.
        //
        MySqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            // read each value 
        }
    }
}

編集

これがあなたがする必要がある変更です

//add name as Select method parameter
public List<string>[] Select(string name)
{
  string query = "SELECT * FROM emp where e_name =@Name"; // change your select query 

  ....

  MySqlCommand cmd = new MySqlCommand(query, connection);
  cmd.Parameters.AddWithValue("@Name", name) // add this line after creating command 

  ....
}

上記のメソッドを次のように呼び出します

 db1.name = Console.ReadLine();
 db1.Select(db1.name);
于 2012-06-09T16:18:58.427 に答える
0

このメソッドは、パラメーターを受け入れる必要があります。

public List<string>[] Select()

このようなもの、おそらく:

public List<string>[] Select(string name)

次に、そのメソッド内で、name変数を参照できます。そのメソッドを呼び出すときは、その変数を指定します。

var listOfResults = dbConnectInstance.Select(someNameValue);

その変数がメソッドに含まれると、SQLクエリで使用できるようになります。これを行うには、クエリのパラメータとして設定しSELECTます。おそらく、このようなものです(これはフリーハンドのコードであることに注意してください。MySql.NETライブラリをテストするのに便利ではありません):

string query = "SELECT * FROM emp where e_name=@ename";
//... (opening the connection like you do now, etc.)
MySqlCommand cmd = new MySqlCommand(query, connection);
cmd.Parameters.Add("@ename", MySqlDbType.VarChar, 80).Value = name;
//... (continuing as you do now)

これが本質的に行うことは、実際の値に置き換えられることを期待する、と呼ばれるクエリにプレースホルダーを作成する@enameことです(これは、任意の名前を付けることができます。プレースホルダーであるための重要な部分です)。@コマンドオブジェクトのコレクションにアイテムを追加するParametersと、プレースホルダーが値に置き換えられます。

これは、ADO.NET(使用しているデータベース接続テクノロジ)では「パラメーター化されたクエリ」と呼ばれます。クエリを動的に保つのに役立ち(1つのクエリを異なる値で再利用できます)、SQLインジェクション攻撃を防ぐのに役立ちます(これは魔法の弾丸ではなく、一般的な主題の理解を深めることができるので、防ぐのに役立ちます。最高の防御)。

MySql .NETライブラリのクエリとパラメータの詳細については、ここから始めてください

于 2012-06-09T16:19:46.737 に答える