为什么从数据库检索到的值没有显示在文本框中

本文关键字:显示 文本 数据库 检索 为什么 | 更新日期: 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();
}