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

时间:2013-03-23 17:23:53

标签: c# .net

为什么我从数据库中检索到的值没有显示在文本框中?我写了以下代码,但它不起作用。我记得这段代码写在表单加载事件上。请告诉我我做的错误?

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]

3 个答案:

答案 0 :(得分:3)

此行似乎不是有效的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;

编辑:看到桌子的架构后,我已经纠正了答案。唯一的错误是在传递给缺少SELECT子句的数据库引擎的命令文本中。但是,您需要在方括号中括起字段名P.ID

我建议更改字段名称。这种命名方案确实令人困惑,因为当您需要为连接在一起的多个表中存在的名称添加前缀时使用它。

See: ALIAS of a name

答案 1 :(得分:0)

使用存储过程或有效的SQL语句

select P.ID from dbo.Tb_Patient as P

答案 2 :(得分:0)

  • 如果您不确定数据库是否不区分大小写,则始终使用与创建中相同的名称。 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();
}