forte74 Ответов: 1

Не удается преобразовать из String в системе.Ио.трансляция


В строке 366 я получаю ошибку не удается преобразовать строку в System.IO.Stream.

а в строке 383 я получаю streamwriter, который не содержит определения close.




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using MySql.Data.MySqlClient;

using System.Diagnostics;


using System.IO;



namespace connect
{

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

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

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

            connection = new MySqlConnection(connectionString);

            this.display();

        }


        // displays the database

        public void display()
        {

            // a is the number of rows 
            int a = -1;

            a = this.Countrows();

            //Console.WriteLine(a);


            // b is the number of columns
            int b = this.Countcolumns();

            //Console.WriteLine(b);


            //create a new list with 3 columns , b = 3; b is the number of columns 
            List<string>[] newlist = new List<string>[b];


            // this.Select() fetches the dataset, set it to equal to newlist 
            newlist = this.Select();


            Console.WriteLine("Id" + " " + "username" + " " + "password");

            for (int j = 0; j < a; j++) // iterate through each row; a is total number of rows 
            {


                for (int i = 0; i < b; i++) // ITERATE THROUGH EACH COLUMN  ; b is total number of columns
                {
                    Console.Write(newlist[i][j] + " ");


                }
                // for each  row of obsv..write a new line
                Console.WriteLine();
            }


        }


        //open connection to database
        public bool OpenConnection()
        {

            try
            {
                connection.Open();

                Console.WriteLine("connection opened");

                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:
                        Console.WriteLine("Cannot connect to server.  Contact administrator");
                        break;

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



        }

        //Close connection
        public bool CloseConnection()
        {
            try
            {
                connection.Close();

                Console.WriteLine("connection closed");
                return true;
            }
            catch (MySqlException ex)
            {
                Console.WriteLine(ex.Message);
                return false;
            }



        }



        //Insert statement
        public void Insert()
        {

            string query = "INSERT INTO users (id, username, password) VALUES('23' ,'Jojo', '33')  , ('99', 'jen', '66')";

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

                Console.WriteLine("values inserted");



                //Execute command
                cmd.ExecuteNonQuery();

                //close connection
                this.CloseConnection();
            }

        }





        //Update statement
        public void Update()
        {

            string query = "UPDATE users SET username='Joe', password='22', id='33'  WHERE username='Joe'";

            //Open connection
            if (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();
            }



        }




        //Delete statement
        public void Delete()
        {

            string query = "DELETE FROM users WHERE username='Joe'";

            if (this.OpenConnection() == true)
            {
                MySqlCommand cmd = new MySqlCommand(query, connection);
                cmd.ExecuteNonQuery();
                this.CloseConnection();
            }


        }




        //Select statement
        public List<string>[] Select()
        {
            string query = "SELECT * FROM users";

            //Create a list of 3 elements to store the result
            List<string>[] list = new List<string>[3];


            // each element of list is a new list of strings
            list[0] = new List<string>();
            list[1] = new List<string>();
            list[2] = new List<string>();

            //Open connection, running OpenConnection() will open the 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        
                // iterate through each row... dataReader.Read will get the data for each row...
                while (dataReader.Read())
                {

                    // iterate through each column, add the id , username, password list[0] is column1 which is id, list[1] IS COLUMN2 WHICH IS USERNAME... list[0][0]  element column 1 , row 1 

                    list[0].Add(dataReader["id"] + "");
                    list[1].Add(dataReader["username"] + "");
                    list[2].Add(dataReader["password"] + "");
                }

                //close Data Reader
                dataReader.Close();

                //close Connection
                this.CloseConnection();

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

        }



        //Count statement
        public int Countrows()
        {
            string query = "SELECT Count(*) FROM users";
            int Count = -1;

            //Open Connection
            if (this.OpenConnection() == true)
            {
                //Create Mysql Command
                MySqlCommand cmd = new MySqlCommand(query, connection);

                //ExecuteScalar will return one value
                Count = int.Parse(cmd.ExecuteScalar() + "");

                //close Connection
                this.CloseConnection();

                return Count;
            }
            else
            {
                return Count;
            }

        }




        public int Countcolumns()
        {

            string query = "SELECT Count(*) FROM INFORMATION_SCHEMA.COLUMNS  WHERE table_schema = 'first_db'  AND table_name = 'users'";
            int Count = -1;

            //Open Connection
            if (this.OpenConnection() == true)
            {
                //Create Mysql Command
                MySqlCommand cmd = new MySqlCommand(query, connection);

                //ExecuteScalar will return one value
                Count = int.Parse(cmd.ExecuteScalar() + "");

                //close Connection
                this.CloseConnection();

                return Count;
            }
            else
            {
                return Count;
            }

        }



        //Backup
        public void Backup()
        {
            try
            {
                DateTime Time = DateTime.Now;
                int year = Time.Year;
                int month = Time.Month;
                int day = Time.Day;
                int hour = Time.Hour;
                int minute = Time.Minute;
                int second = Time.Second;
                int millisecond = Time.Millisecond;

                //Save file to C:\ with the current date as a filename
                string path;
                path = "C:\\MySqlBackup" + year + "-" + month + "-" + day +
            "-" + hour + "-" + minute + "-" + second + "-" + millisecond + ".sql";
                StreamWriter file = new StreamWriter(path);


                ProcessStartInfo psi = new ProcessStartInfo();
                psi.FileName = "mysqldump";
                psi.RedirectStandardInput = false;
                psi.RedirectStandardOutput = true;
                psi.Arguments = string.Format(@"-u{0} -p{1} -h{2} {3}",
                    uid, password, server, database);
                psi.UseShellExecute = false;

                Process process = Process.Start(psi);

                string output;
                output = process.StandardOutput.ReadToEnd();
                file.WriteLine(output);
                process.WaitForExit();
                file.Close();
                process.Close();
            }
            catch (IOException ex)
            {
                Console.WriteLine("Error , unable to backup!");

                Console.WriteLine("ex.message");
            }



        }



        /*
        //Restore
        public void Restore()
        {
        }
         * 
          */
    }



}


Что я уже пробовал:

Я не знаю, что сюда положить. это просто ошибка, о которой я понятия не имею. поскольку я совершенно новичок в C#, я прошу вашего понимания здесь.

Graeme_Grant

Вы же знаете, что нет номеров строк, верно? Существует также слишком много кода, не связанного с этой проблемой. Пожалуйста, обновите вопрос только с извлеченной соответствующей информацией...

CPallini

Ваш код выглядит правильно. Не могли бы Вы отметить оскорбительные строки?

CHill60

В чем заключается содержание path?

1 Ответов

Рейтинг:
2

Thomas Nielsen - getCore

О, вы неправильно поняли объекты, то, что вы написали, было

string path = "C:\\MySqlBackup" + year + "-" + month + "-" + day +
           "-" + hour + "-" + minute + "-" + second + "-" + millisecond + ".sql";
               StreamWriter file = new StreamWriter(path);



Но то, что вы хотите сделать, это создать поток перед тем, как сделать writer, и не забудьте либо экранировать свои escape-символы (обратная косая черта), либо использовать индикатор константы compiletime (@)

string path = @"C:\\MySqlBackup" + year + "-" + month + "-" + day +
                           "-" + hour + "-" + minute + "-" + second + "-" + millisecond + ".sql";

            using (var stream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
            {
                var writer = new StreamWriter(stream, Encoding.UTF8);
                writer.Write("Hello world");
                writer.Flush();
                writer.Close();
            }


GKP1992

@forte74 вы должны заметить, что Томас завернул объект stream в блок using.
Это хорошая практика для одноразовых объектов и гарантирует, что поток будет закрыт после завершения задачи.