【问题标题】:Variable can't seem to recieve an value on c# when connecting to SQL连接到 SQL 时,变量似乎无法在 c# 上接收值
【发布时间】:2021-12-21 15:32:56
【问题描述】:

我正在编写一个算法来交付明天,它需要将 C# 与 SQL 数据库集成以进行测试。

我设法进行了集成,它顺利地连接到数据库,但是当我向数据库添加一个值时,它给出了一个异常错误,表明其中一个变量给出了一个空值。通过进一步调查,我意识到其中一个变量没有收到应有的值,所以它给出了这个异常错误,我该如何解决?

代码如下:

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

// add data function classes
using System.Data;

namespace LoginSystem
{
    public class DBConnect
    {
        string ConectionString = "";  // save connection string
        public MySqlConnection connection = null;
        public string server = "127.0.0.1:3306";// MySQL host / ip of the computer
        public string user = "root";// MySQL user
        public string password = "@Gilberto099";// MySQL password 
        DataSet ds;
        DataTable dt;
        public string Table = "teste1"; // initialize db table
        public string ConnectionType = "";
        string RecordSource = "";

        DataGridView tempdata;

        public DBConnect()
        {

        }

        // function to connect to the database
        public void Connect(string database_name)
        {
            try
            {

                ConectionString = "SERVER=" + server + ";" + "DATABASE=" + database_name + ";" + "UID=" + user + ";" + "PASSWORD=" + password + ";";

                connection = new MySqlConnection(ConectionString);
            }
            catch (Exception E)
            {
                MessageBox.Show(E.Message);
            }
        }

        // Function to execute select statements
        public void ExecuteSql(string Sql_command)
        {

            nowquiee(Sql_command);

        }

        // creates connection to MySQL before execution
        public void nowquiee(string sql_comm)
        {
            try
            {
                MySqlConnection cs = new MySqlConnection(ConectionString);
                cs.Open();
                MySqlCommand myc = new MySqlCommand(sql_comm, cs);
                myc.ExecuteNonQuery();
                cs.Close();


            }
            catch (Exception err)
            {

                MessageBox.Show(err.Message);
            }
        }

        // function to execute delete , insert and update
        public void Execute(string Sql_command)
        {
            RecordSource = Sql_command;
            Table = ConnectionType;
            dt = new DataTable(ConnectionType);
            try
            {
                string command = RecordSource.ToUpper();

                //======================if sql contains select==========================================
                MySqlDataAdapter da2 = new MySqlDataAdapter(RecordSource, connection);

                DataSet tempds = new DataSet();
                da2.Fill(tempds, ConnectionType);
                da2.Fill(tempds);

                //======================================================================================


            }
            catch (Exception err) { MessageBox.Show(err.Message); }
        }

        // function to bring selected results based on column name and row index
        public string Results(int ROW, string COLUMN_NAME)
        {
            try
            {
                return dt.Rows[ROW][COLUMN_NAME].ToString();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
                return "";

            }
        }

        // function to bring selected results based on column index and row index
        public string Results(int ROW, int COLUMN_NAME)
        {
            try
            {
                return dt.Rows[ROW][COLUMN_NAME].ToString();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
                return dt.Rows[ROW][COLUMN_NAME].ToString();

            }
        }
        public string ResultsColumn(string COLUMN_NAME)
        {
            try
            {
                return dt.Columns[COLUMN_NAME].ToString();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
                return "";

            }
        }
        public string ResultsColumni(int COLUMN_NAME)
        {
            try
            {
                return dt.Columns[COLUMN_NAME].ToString();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
                return dt.Columns[COLUMN_NAME].ToString();

            }
        }

        // Execute select statement
        public void ExecuteSelect(string Sql_command)
        {
            RecordSource = Sql_command;
            ConnectionType = Table;

            dt = new DataTable(ConnectionType);
            try
            {
                string command = RecordSource.ToUpper();
                MySqlDataAdapter da = new MySqlDataAdapter(RecordSource, connection);
                ds = new DataSet();
                da.Fill(ds, ConnectionType);
                da.Fill(dt);
                tempdata = new DataGridView();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }


        }

        // count Number of rows after select
        public int Count()
        {
            return dt.Rows.Count;
        }
    }
}

【问题讨论】:

  • 这段代码到处都是。// function to execute delete , insert and update 然后使用 dataadapter.Fill - 这是一个选择。请..看看dapper-tutorial.net;它会让你的生活更轻松,你可以把这一切都扔掉
  • 我没有时间学习另一个 NuGet - 老实说,你这么说,但是当你真正看到 Dapper 为你做了什么时,你会希望你会意识到你没有'实际上没有时间不学习它 - 没有什么可学习的,它极大地减轻了你当前数据访问的麻木乏味
  • 当我向数据库添加值时 - 我困惑的根源是这些代码似乎都没有向数据库添加任何内容;似乎没有 INSERT 查询,也没有调用数据适配器。更新。我看到 nowquiee 看起来它能够执行插入,并且它由 Execute_Sql 调用,但似乎没有任何东西可以通过插入调用它们中的任何一个..
  • 我在这段代码中看到的许多问题中:一个您没有处理的缓存连接,并且您调用了两次Fill。 SQL 字符串上的ToUpper 非常糟糕。我想说这段代码通常太复杂了,帮助函数实际上并没有做太多。
  • 我尝试了 dapper,现在他拒绝连接到我的数据库,它给出“无法访问数据库,登录失败 'MicrosoftAccount/(帐户)”

标签: c# mysql sql


【解决方案1】:

不应该是字符串数据类型吗? (int COLUMN_NAME)

// function to bring selected results based on column index and row index
    public string Results(int ROW, int COLUMN_NAME)
    {
        try
        {
            return dt.Rows[ROW][COLUMN_NAME].ToString();
        }
        catch (Exception err)
        {
            MessageBox.Show(err.Message);
            return dt.Rows[ROW][COLUMN_NAME].ToString();

        }
    }

【讨论】:

  • 问题是我想检查一个特定的列,但是想检查每一行,而不是一个特定的行,这部分会找到特定的行和一个特定的列
  • 您能否添加断点并检查错误并附上图片。如果可能的话。这样我们就知道哪个方法失败了。
  • 是ResultColumn方法失败了,他收到了一个表值(字符串中的一个名字)但是Connection String没有收到任何东西,但是正如Connection方法中所说,它应该
  • 嗨,你可以这样做。 for (int i = 0; i 如果与输入参数列匹配则返回myColumn。
猜你喜欢
  • 2013-01-05
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 2014-05-02
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
相关资源
最近更新 更多