连接到 SQL 时,变量似乎无法在 c# 上接收值
Posted
技术标签:
【中文标题】连接到 SQL 时,变量似乎无法在 c# 上接收值【英文标题】:Variable can't seem to recieve an value on c# when connecting to SQL 【发布时间】: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/(帐户)”
【参考方案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。以上是关于连接到 SQL 时,变量似乎无法在 c# 上接收值的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin/WinForms 客户端在双线程架构中发送/接收时无法连接到套接字