为什么从数据库检索到的值没有显示在文本框中
本文关键字:显示 文本 数据库 检索 为什么 | 更新日期: 2023-09-27 18:05:43
为什么我从数据库中检索的值不显示在文本框中?我写了下面的代码,但它不工作。我记住,这段代码是在表单加载事件上编写的。请一定告诉我我做错了什么。
using (SqlConnection myConnection = new SqlConnection(Common.GetDBConnectionString()))
{
using (SqlCommand cmd = new SqlCommand("P.ID from dbo.Tb_Patient", myConnection))
{
cmd.CommandType = CommandType.StoredProcedure;
myConnection.Open();
//SqlParameter custId = (cmd.Parameters.AddWithValue("@dbo.Tb_Patient", 10));
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
string nameValue = reader["P.ID"].ToString();
MessageBox.Show("value is:",nameValue);
txtid.Text = nameValue;
}
else {
MessageBox.Show("Data is not retrived");
}
}
}
}
更新自注释:
CREATE TABLE [dbo].[Tb_Patient]( [P.Id] [int] IDENTITY(1,1) NOT NULL, [P.Name] [nvarchar](50) NOT NULL, [P.Age] [nvarchar](50) NOT NULL, [P.Contact] [nvarchar](50) NOT NULL, [P.Date] [datetime] NULL, [P.Occupation] [nvarchar](50) NOT NULL, [P.Gender] [nvarchar](50) NOT NULL, CONSTRAINT [PK_Tb_Patient] PRIMARY KEY CLUSTERED ( [P.Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
这一行似乎不是一个有效的SQL查询,也不是存储过程的名称:
using (SqlCommand cmd = new SqlCommand("P.ID from dbo.Tb_Patient", myConnection))
可能正确的文本是:
using (SqlCommand cmd = new SqlCommand("select [P.ID] from dbo.Tb_Patient", myConnection))
当然,它不是一个存储过程,而是一个普通的命令文本:
cmd.CommandType = CommandType.Text;
EDIT:在看到你的表的模式后,我已经纠正了答案。唯一的错误是传递给数据库引擎的命令文本在开始时缺少SELECT子句。但是,您需要将字段名称P.ID
括在方括号中。
我建议更改字段名。这种命名模式确实令人困惑,因为当您需要在多个连接在一起的表中为名称添加前缀时使用它。
参见:别名
使用存储过程或有效的SQL语句
select P.ID from dbo.Tb_Patient as P
- 如果您不确定数据库是否不区分大小写,则始终使用与创建时相同的名称。
CREATE TABLE [dbo].[Tb_Patient]( [P.Id] [int] ...
- 以
;
结束命令字符串
试试
using (SqlConnection myConnection = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SELECT [P.Id] from dbo.Tb_Patient;";
cmd.CommandType = CommandType.Text;
cmd.Connection = myConnection;
myConnection.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
string nameValue = reader["P.Id"].ToString();
MessageBox.Show("value is:",nameValue);
txtid.Text = nameValue;
}
else {
MessageBox.Show("Data is not retrieved");
}
reader.Close();
}