如何使用C#将SQL数据库中的值获取到文本框中?

我正在创建一个预订管理系统,我在尝试从SQL数据库中获取数据并插入到我的应用程序的一组文本框中时遇到问题。

我想在DataGridView中显示单击按钮时的客户详细信息,但是当我单击该按钮时,应用程序会抛出exception,并显示以下错误消息;

没有数据时读取的尝试无效。

我附上了我要查看客户详细信息的屏幕截图 ,以及按钮的代码,最终将在相应的文本框中显示客户详细信息。 任何帮助将不胜感激!

SqlConnection sc = new SqlConnection("Data Source=localhost;Initial Catalog=LoginScreen;Integrated Security=True"); SqlCommand com = new SqlCommand(); com.Connection = sc; sc.Open(); SqlDataReader read = (null); com.CommandText = ("select * from Pending_Tasks"); read = com.ExecuteReader(); CustID.Text = (read["Customer_ID"].ToString()); CustName.Text = (read["Customer_Name"].ToString()); Add1.Text = (read["Address_1"].ToString()); Add2.Text = (read["Address_2"].ToString()); PostBox.Text = (read["Postcode"].ToString()); PassBox.Text = (read["Password"].ToString()); DatBox.Text = (read["Data_Important"].ToString()); LanNumb.Text = (read["Landline"].ToString()); MobNumber.Text = (read["Mobile"].ToString()); FaultRep.Text = (read["Fault_Report"].ToString()); sc.Close(); 

您的代码中缺少行reader.Read() 。 你应该添加它。 它是实际从数据库中读取数据的函数:

 string conString = "Data Source=localhost;Initial Catalog=LoginScreen;Integrated Security=True"; SqlConnection con = new SqlConnection(conString); string selectSql = "select * from Pending_Tasks"; SqlCommand com = new SqlCommand(selectSql, con); try { con.Open(); using (SqlDataReader read = cmd.ExecuteReader()) { while(reader.Read()) { CustID.Text = (read["Customer_ID"].ToString()); CustName.Text = (read["Customer_Name"].ToString()); Add1.Text = (read["Address_1"].ToString()); Add2.Text = (read["Address_2"].ToString()); PostBox.Text = (read["Postcode"].ToString()); PassBox.Text = (read["Password"].ToString()); DatBox.Text = (read["Data_Important"].ToString()); LanNumb.Text = (read["Landline"].ToString()); MobNumber.Text = (read["Mobile"].ToString()); FaultRep.Text = (read["Fault_Report"].ToString()); } } } finally { con.Close(); } 

编辑:此代码工作假设您要将最后一条记录写入文本框。 如果要应用不同的方案,例如,当您单击“ Next按钮时读取数据库中的所有记录并更改texbox中的数据,则应创建并使用自己的模型,或者可以将数据存储在DataTable中如果你愿意,可以在以后再参考。

 using (SqlConnection connection = new SqlConnection("Data Source=localhost;Initial Catalog=LoginScreen;Integrated Security=True")) { SqlCommand command = new SqlCommand("select * from Pending_Tasks WHERE CustomerId=...", connection); connection.Open(); SqlDataReader read= command.ExecuteReader(); while (read.Read()) { CustID.Text = (read["Customer_ID"].ToString()); CustName.Text = (read["Customer_Name"].ToString()); Add1.Text = (read["Address_1"].ToString()); Add2.Text = (read["Address_2"].ToString()); PostBox.Text = (read["Postcode"].ToString()); PassBox.Text = (read["Password"].ToString()); DatBox.Text = (read["Data_Important"].ToString()); LanNumb.Text = (read["Landline"].ToString()); MobNumber.Text = (read["Mobile"].ToString()); FaultRep.Text = (read["Fault_Report"].ToString()); } read.Close(); } 

确保查询中有数据: 从Pending_Tasks中选择*并使用“using System.Data.SqlClient;”

read = com.ExecuteReader()

SqlDataReader有一个函数Read() ,它从查询的结果中读取下一行,并返回一个bool无论它是否找到下一行要读取。 因此,在实际从读取器获取列之前,您需要检查它(它总是只获取Read()获得的当前行)。 或者最好在查询返回多行的while(read.Read())进行循环while(read.Read())

如果要显示从数据库到文本框的单值访问,请参阅以下代码:

 SqlConnection con=new SqlConnection("connection string"); SqlCommand cmd=new SqlConnection(SqlQuery,Con); Con.Open(); TextBox1.Text=cmd.ExecuteScalar(); Con.Close(); 

要么

 SqlConnection con=new SqlConnection("connection string"); SqlCommand cmd=new SqlConnection(SqlQuery,Con); Con.Open(); SqlDataReader dr=new SqlDataReadr(); dr=cmd.Executereader(); if(dr.read()) { TextBox1.Text=dr.GetValue(0).Tostring(); } Con.Close(); 

建立连接并打开它。

 con = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=)));User Id =; Password ="); con.Open(); 

写下选择查询:

 string sql = "select * from Pending_Tasks"; 

创建一个命令对象:

 OracleCommand cmd = new OracleCommand(sql, con); 

执行命令并将结果放入对象中以进行读取。

 OracleDataReader r = cmd.ExecuteReader(); 

现在开始阅读它。

 while (read.Read()) { CustID.Text = (read["Customer_ID"].ToString()); CustName.Text = (read["Customer_Name"].ToString()); Add1.Text = (read["Address_1"].ToString()); Add2.Text = (read["Address_2"].ToString()); PostBox.Text = (read["Postcode"].ToString()); PassBox.Text = (read["Password"].ToString()); DatBox.Text = (read["Data_Important"].ToString()); LanNumb.Text = (read["Landline"].ToString()); MobNumber.Text = (read["Mobile"].ToString()); FaultRep.Text = (read["Fault_Report"].ToString()); } read.Close(); 

使用Oracle.ManagedDataAccess.Client添加它;